【发布时间】:2013-02-28 22:11:40
【问题描述】:
我正在尝试使用可在 C 程序代码中使用的 POSIX(扩展)正则表达式创建正则表达式。
具体来说,我想出了以下内容,但是,我想在匹配的表达式中排除“http”这个词。经过一番搜索,POSIX 看起来并不明显可以捕获特定的字符串。我在下面的示例中使用了一种称为“负面观察”的东西(即 (?!http:) )。但是,我担心这可能仅适用于 POSIX 以外的方言中定义的正则表达式。 是否允许负前瞻? POSIX 中是否允许使用逻辑 NOT 运算符(即 ! )?
工作正则表达式示例:
href|HREF|src[[:space:]]<em>=[[:space:]]</em>\"(?!http:)[^\"]+\"[/]
如果我不能像在其他方言中那样使用否定前瞻,我可以对上面的正则表达式做些什么来过滤掉特定的单词“http:”?理想情况下,有没有任何方法没有逆逻辑并最终在此过程中创建一个可笑的长正则表达式? (我上面的那个已经很长了,如果可能的话,我希望它看起来不会更混乱)
[注意:我已经在 Stack Overflow 中咨询过其他相关主题,但最相关的主题似乎只是“一般”地问这个问题,这意味着给出的答案并不一定意味着它们是 POSIX 风格的 ==> 在另一个线程或两个,我已经看到上面的 (?!insertWordToExcludeHere) 否定前瞻,但我担心它只适用于 PHP。)
[注 2:我也会采用任何 POSIX 正则表达式短语,我们将不胜感激。有没有人对过滤掉“http:”的正则表达式的外观以及它如何适合我当前的正则表达式提出建议,替换 (?!http:)?]
【问题讨论】:
-
其实,如果需要检查字符串中特定位置(开始、结束、特定部分之后)是否缺少某个单词,可以匹配反向模式,但是可以' 不匹配在字符串内任何位置不包含某些多字符子字符串的字符串。
标签: regex regex-negation negative-lookahead posix-ere