9

我正在尝试使用可在 C 程序代码中使用的 POSIX(扩展)正则表达式创建正则表达式。

具体来说,我想出了以下内容,但是,我想在匹配的表达式中排除“http”这个词。经过一番搜索,POSIX 看起来并不明显可以捕获特定的字符串。我在下面的示例中使用了一种称为“负面观察”的东西(即(?!http:))。但是,我担心这可能仅适用于 POSIX 以外的方言中定义的正则表达式。是否允许负前瞻?POSIX 中是否允许使用逻辑 NOT 运算符(即!)?

工作正则表达式示例:

href|HREF|src[[:space:]]=[[:space:]]\"(?!http:)[^\"]+\"[/]

如果我不能像在其他方言中那样使用否定前瞻,我可以对上面的正则表达式做些什么来过滤掉特定的单词“http:”?理想情况下,有没有什么方法没有逆逻辑并最终在这个过程中创建一个可笑的长正则表达式?(我上面的那个已经很长了,如果可能的话,我希望它看起来不会更混乱)

[注意:我已经咨询过 Stack Overflow 中的其他相关主题,但最相关的主题似乎只是“一般”地问这个问题,这意味着给出的答案并不一定意味着它们是 POSIX 风格的 ==> 在另一个或两个线程中,我已经看到了上面的 (?!insertWordToExcludeHere) 负面预测,但我担心它只适用于 PHP。)

[注 2:我也会采用任何 POSIX 正则表达式短语,我们将不胜感激。有没有人对过滤掉“http:”的正则表达式的外观以及它如何适合我当前的正则表达式提出建议,替换(?!http:)?]

4

1 回答 1

10

根据http://www.regular-expressions.info/refflavors.html前瞻和后视不在 POSIX 风格中。

如果您的问题太复杂而无法清晰地表示为正则表达式,您可以考虑考虑词法分析(标记化)和解析。

于 2013-03-13T05:11:35.907 回答