我想弄清楚为什么当“单线”选项打开时,带有负向预览的正则表达式失败。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