我想弄清楚爲什麼當「單線」選項打開時,帶有負向預覽的正則表達式失敗。C#正則表達式:負向預測失敗,單線選項
實施例(簡化):
<source>Test 1</source>
<source>Test 2</source>
<target>Result 2</target>
<source>Test 3</source>
此:如果單個行選項是
<source>(?!.*<source>)(.*?)</source>(?!\s*<target)
將失敗,並且如果該單線選項是關閉將起作用。例如,這可以工作(禁用單行選項):
(?-s:<source>(?!.*<source>)(.*?)</source>(?!\s*<target))
我的理解是單線模式只允許點「。」。以匹配新的行,我不明白爲什麼它會影響上面的表達。
任何人都可以解釋我在這裏失蹤?
::::::::::::::::::::::
編輯:(?!。*)是提前負外觀沒有捕獲組。
<source>(?!.*?<source>)(.*?)</source>(?!\s*<target)
如果單線模式打開也會失敗,所以它看起來不像是貪婪問題。嘗試在一個正則表達式的設計師(如快報或拉德正則表達式):
使用單線OFF,它匹配(如預期):
<source>Test 1</source>
<source>Test 3</source>
使用單線ON:
<source>Test 3</source>
我不明白爲什麼它與第一個不匹配:它不包含第一個負面觀察,所以它應該匹配表達式。
通過解析這個使用html解析器而不是正則表達式來幫助你自己一個忙吧http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Amarghosh 2010-06-01 08:18:12
等待來自John Saunders的評論:3 ... 2 ... 1 ... – 2010-06-01 08:33:23
@Amarghosh。在我的情況下不相關。是的,有一些使用正則表達式是需要做的事情。 – Sylverdrag 2010-06-01 09:42:42