簡體   English   中英

正則表達式:以“%”開頭的單詞

[英]Regex: Searching for words with '%' at the beginning

我一直試圖自己解決這個問題,但是我擔心正則表達式不是我的事。 在此示例字符串中: “我的名字是%name,我住在$ address。” 我試圖獲取以“%”開頭的單詞,然后將它們替換為$name$address的值,具體取決於在正則表達式中找到的單詞。 然后,將返回新字符串,其中包含替換后的值。

不應返回以下單詞: aaa%aaa (%不是第一個字符)和\\%word (%被轉義)

這是在PHP中。 我正在使用它,因為我是從* .ini文件中抓取數據的,其中所有內容都是字符串。 我刪除了$ _POST示例,以免引起誤解。

這應該做得很好:

(?<!\\|\w)%\w+

但是,在顯示之前/任何之前不對$ _POST / $ _ GET進行消毒通常是一件壞事。

在javascript或類似的REGEX引擎中,您可以使用:

\B(%\w+)\b

編輯:
在這種情況下,最后的\\b是可選的,因為\\w將匹配所需的所有字符,並停止使用@tchrist指出的任何非單詞char。

編輯2:這將不匹配\\%name

(?:^|\s)(%\w+)

這看起來可能可行。 這種對齊方式甚至可以逃脫。 --

(?<!\\\\)(?:\\\\.)*(?<![%\\w])%(\\w+)

展開-

(?<!\\)     # Not an escape behind us
(?:\\.)*    # 0 or many esc plus anything
(?<![%\w])  # not % nor \w behind us
%(\w+)      # % then capture grp1 bunch of word chars

這樣的事情會有所幫助。

$string = "Hello %name from %city ";

$name = "Joe";
$city = "Boston";
$array = array();


preg_match("/%\w+/",$string,$array);

foreach($array as $string1)
               echo "match: ".$string1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM