0
我想找出其中一個特定的標記不會發生字符串,如:正則表達式塊否定
<xyz>[\w]+<[^(unwanted)]></xyz>
其中unwanted
將被解釋爲a
,d
,e
,n
,t
和u
。但我想要的是塊字符串。我如何用正則表達式表達它? 我已經試過負先行,這不工作:
<xyz>.+(?!unwanted).+</xyz>
我想找出其中一個特定的標記不會發生字符串,如:正則表達式塊否定
<xyz>[\w]+<[^(unwanted)]></xyz>
其中unwanted
將被解釋爲a
,d
,e
,n
,t
和u
。但我想要的是塊字符串。我如何用正則表達式表達它? 我已經試過負先行,這不工作:
<xyz>.+(?!unwanted).+</xyz>
<xyz>(?:(?!unwanted).)+</xyz>
匹配所有字符在<xyz>...</xyz>
,但只只要表達unwanted
不會在任何人的開始。
cHao,非常感謝你回答這個難題。 但是,答案也非常困難。解決方案已經吹捧我。 只是想檢查我的理解, 儘管順序(?!不需要)。或(。!不想要的),它不會改變效果,對吧? 爲什麼使用(?:)+?這是否意味着除了「不需要的」之外的任何角色坐在單個角色的位置? – 2013-02-14 20:49:29
'(?:...)'把內部的東西分組,但是沒有捕獲它。如果你不關心捕獲,你可以只說'(...)',但這太浪費了。無論哪種方式都是爲了讓'+'適用於整個事物,所以它會匹配任何不是表達式'unwanted'開頭的字符。至於整件事情,它的工作原理是這樣的:它試圖匹配的每個字符,它首先做一個負向預測('(?!...)')以確保表達式'unwanted'不匹配那裏。如果沒有,那麼它會抓住那個角色,然後再次嘗試下一個角色。 – cHao 2013-02-15 04:14:13
如果沒有'(?:...)'(或者可選的'(...)'),那麼'+'只適用於'.',並且最終會匹配任何沒有' t *開始*與'不需要的'。不過,由此產生的匹配在第一個字符之後的任何地方仍然可能有「不需要的」。這就是爲什麼你想在每個位置測試(因此,爲什麼你把前視和'.'分組在一起)。 – cHao 2013-02-15 04:23:58