我要匹配有作爲邊界的「__」字符序列(兩個下劃線)如何匹配字符串組不包含一些子
例如串組:
hello __1the_re__ my name is __pe er33__
「1the_re」和「PE er33」亦宜
我的問題是定義
/__((?!__).*)__/
「不包含字符序列串」
我試過這個,但它不工作...
謝謝!
我要匹配有作爲邊界的「__」字符序列(兩個下劃線)如何匹配字符串組不包含一些子
例如串組:
hello __1the_re__ my name is __pe er33__
「1the_re」和「PE er33」亦宜
我的問題是定義
/__((?!__).*)__/
「不包含字符序列串」
我試過這個,但它不工作...
謝謝!
你接近:
/__((?!__).)*__/
作品。星星必須在重複組之外,因此前瞻在每個位置執行,而不僅僅是前導__
之後。
因爲這不捕獲正確的文本(我猜你想要的雙下劃線之間的內容被捕獲),你可能想
/__((?:(?!__).)*)__/
您可以使用非貪婪的標誌: 「?」。
/__((?!__).*?)__/g
// javascript:
>>> "hello __1the_re__ my name is __pe er33__".match(/__((?!__).*?)__/g)
["__1the_re__", "__pe er33__"]
這沒什麼意義 - 如果你讓量詞懶惰,你不需要前瞻斷言。 – 2012-03-06 17:19:16
裏面你的分組,要符合下列之一:
_
。_
正則表達式:
/__(.[^_]|[^_])*__/
由於第一場比賽第一,這是不言而喻的。爲了更好的匹配提取,添加非抓取標誌和匹配內:
/__((?:.[^_]|[^_])*)__/
例子:
$subject = 'hello __1the_re__ my name is __pe er33__';
$pattern = '/__((?:.[^_]|[^_])*)__/';
$r = preg_match_all($pattern, $subject, $match);
print_r($match[1]);
輸出:
Array
(
[0] => 1the_re
[1] => pe er33
)
但很明顯,它使只是更容易量詞懶惰:
/__(.+?)__/
不錯!好吧,現在我明白我的正則表達式出了什麼問題,謝謝! – skyline26 2012-03-06 17:23:07