[英]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.