POSIX 正则表达式:排除表达式中的单词?

问题描述 投票:0回答:1

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

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

工作正则表达式示例:

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

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

[注意:我已经咨询过 Stack Overflow 中的其他相关线程,但最相关的线程似乎只“一般性”地问这个问题,这意味着给出的答案并不一定意味着它们是 POSIX 风格的 ==> 在另一个线程中或二,我已经看到了上面的

 (?!insertWordToExcludeHere) 
否定前瞻,但我担心它只适用于 PHP。)

[注 2:我也会采用任何 POSIX 正则表达式短语,任何帮助将不胜感激。有谁对过滤掉“http:”的正则表达式是什么样子以及它如何适合我当前的正则表达式,替换 (?!http:)?]

有什么建议吗?
regex regex-negation regex-lookarounds posix-ere
1个回答
14
投票

根据 Regular-Expressions.info 前瞻和后瞻不属于 POSIX 风格。

如果您的问题太复杂而无法干净地表示为正则表达式,您可以考虑从词法分析(标记化)和解析的角度进行思考。

© www.soinside.com 2019 - 2024. All rights reserved.