我正在尝试使用POSIX(扩展)正则表达式创建一个正则表达式,我可以在我的C程序代码中使用它。
具体来说,我提出了以下内容,但是,我想在匹配的表达式中排除“http”这个词。经过一些搜索,看起来POSIX并不像捕获特定字符串那样明显。我在下面的例子中使用了一个叫做“负面看起来”的东西(即(?! http :) )。但是,我担心这可能只是POSIX以外的方言中定义的正则表达式可用的东西。 是否允许否定前瞻? POSIX中是否允许逻辑NOT运算符(即!)?
使用正则表达式示例:
href|HREF|src[[:space:]]=[[:space:]]\"(?!http:)[^\"]+\"[/]
如果我不能像其他方言那样使用负面预测,我可以对上面的正则表达式做什么来过滤掉特定的单词“http:”?理想情况下,有没有任何方法没有逆逻辑,并最终在过程中创建一个荒谬的长正则表达式? (我上面的那个已经很久了,如果可能的话,我宁愿看起来也不会太混乱)
[注意:我已经在Stack Overflow中咨询过其他相关主题,但最相关的主题似乎只是“一般地”提出这个问题,这意味着给出的答案并不一定意味着它们是POSIX风格的==>在另一个或两个线程中,我已经看到上面的 (?!insertWordToExcludeHere)
否定前瞻,但我担心它只适用于PHP。)
[注2:我也将采取任何POSIX正则表达式措辞,任何帮助将不胜感激。有没有人建议过滤掉“http:”的正则表达式是什么样的,以及它如何适合我当前的正则表达式,替换(?! http :) ?]
答案 0 :(得分:8)
根据http://www.regular-expressions.info/refflavors.html,前瞻和后视不属于POSIX风格。
您可以考虑使用lexing(标记化)和解析,如果您的问题过于复杂,无法像正则表达式那样干净地表示。