【发布时间】:2011-07-03 00:50:48
【问题描述】:
我想捕捉任何东西,但不包括特定的模式。我的实际问题与从 html 中解析信息有关,但我将问题提炼为一个示例,希望能澄清我的问题。
来源
xaxbxcabcabc
所需匹配
xaxbxc
如果我使用前瞻,表达式将捕获第一次出现
.*(?=abc) => xaxbxcabc
我想要一些类似于否定字符类的东西,只是为了一个否定模式。
.*[^abc] //where abc as a pattern instead of a list giving anything but a, b or c
我正在使用http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx 进行测试
【问题讨论】:
-
您可能会发现regexhero.net/tester 也是一名优秀的测试人员。
-
@Mormegil 使用
*?的答案是您想要的答案。仅供参考,可能会有负面的前瞻,因此您的最后一个代码块将变为.*(?!abc)。但是,这似乎与您的情况无关,也不是消极的向后看。.*(?!abc)将从您的样本中捕获xaxbxcabcabc,.*(?<!abc)将捕获xaxbxcabcab。 -
@Matti - 我理解反对使用正则表达式解析 html。我的情况可能(或者我很容易出错)有点不同。在这种情况下,我试图从特定页面中提取特定信息,该页面的 html 格式不正确并且不包含内容含义的语义信号。我正在使用正则表达式来查找内容含义的上下文指示。结果将是一个脆弱的数据捕获功能,我知道只要网站所有者更改标记,我就必须对其进行编辑。在理想情况下,他们会提供一个 api,或者至少生成更好的 html。
-
@driis - 感谢您的建议,我会检查那个测试器。