[英]Getting variables from string with regular expressions
我發瘋了,一個正則表達式。 我有一個像這樣的字符串:
%closed% closed (%closed_percent%\%), %open% open (%open_percent%\%)
我需要一個匹配以下內容的正則表達式:
%closed%
%closed_percent%
%open%
%open_percent%
但不是兩個\\%
目前,我使用:
\%([^\%]+)\%
這給了我:
%closed%
%closed_percent%
%), %
% open (%
...
有人可以幫我嗎?
簡單的方法:
%\w+%
符合項目: %foo%
允許(多個)反斜杠轉義:
(?<!\\)(?:\\.)*%(\w+)%
僅匹配以下bar
: \\%foo% \\\\%bar% \\\\\\%baz%
...這也允許在其中進行轉義:
(?<!\\)(?:\\.)*%((?:[^\\%\s]+|\\.)+)%
匹配: %foo\\%bar%
將第一個捕獲組的值與最后兩個表達式一起使用。
嘗試這個:
\%([^(\\\%)]+?)\%
火柴
%closed%
%closed_percent%
%open%
%open_percent%
為了我。
假設對百分比包裝的令牌(包括轉義字符)中的內容以及可以轉義哪些字符(因此也可以轉義反斜杠: \\\\%token%
應該有效)沒有任何限制,
這是您可以用來跳過轉義字符的模式:
\\.|(%([^%\\]|\\.)+%)
這將捕獲百分比包裝的令牌,並將它們捕獲在第一組( $1
)中。 轉義的字符也將被匹配(跳過它們是一個很好的技巧),但是使用PHP可以很容易地獲得相關的標記:
preg_match_all('/\\\\.|(%([^%\\\\]|\\\\.)+%)/', $str, $matches, PREG_PATTERN_ORDER);
$matches = array_filter($matches[1]);
工作示例: http : //ideone.com/dziCB
嘗試:
~\%\w+\%~
因此,在選擇中僅允許使用AZ和_。
$str = "%closed% closed (%closed_percent%\%), %open% open (%open_percent%\%)";
preg_match_all("~\%\w+\%~", $str, $matches);
$matches
現在包含:
Array
(
[0] => Array
(
[0] => %closed%
[1] => %closed_percent%
[2] => %open%
[3] => %open_percent%
)
)
在反斜杠后面添加否定的lookbehind! 這樣, \\%
就被忽略了。
(?<!\\)\%([^\%]+)(?<!\\)\%
火柴
%關閉%
%closed_percent%
%打開%
%open_percent%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.