正则表达式:匹配除“<”、“”和“%”之外的任何内容

Posted

技术标签:

【中文标题】正则表达式:匹配除“<”、“”和“%”之外的任何内容【英文标题】:Regex: match anything but not "<", "" and "%"正则表达式:匹配除“<”、“”和“%”之外的任何内容 【发布时间】:2016-01-16 00:44:58 【问题描述】:

我尝试实现词法分析器并尝试创建正则表达式,它将匹配任何内容,但不匹配以下内容:

%

我正在尝试:

[^(<||%)]+

但它也不看蚂蚁单“”和“%”符号。

可以用正则表达式吗?

输入:“foo bar

【问题讨论】:

所以假设文本是a b。从头开始,有一个子字符串a ,不包含&lt;,不包含,不包含%。所以按照你的逻辑应该匹配。但我很确定这不是你想要的。 (如果您认为我过于字面,请记住,如果您创建的正则表达式在您的问题中具有确切的标准,那么这种过于字面的解释正是计算机会给出的。) 前瞻?我只需要匹配“a”和“b”。 我猜你会想要“a”和“b”,但是是的,无论哪种方式,都可以通过前瞻来实现。但我认为最简单的方法是做 mevdschee 回答的事情。 那不是一个选项然后你创建词法分析器(如 flex)。 【参考方案1】:

您可以使用基于环视的正则表达式:

(?<=\s|^)(?![%]|<)\S+

(?![%]) 是负前瞻,以匹配不是% 的任何非空格文本。

RegEx Demo

【讨论】:

太棒了!如何也匹配空格而不是“ 好的,您能否提供一些示例输入和有问题的预期匹配项。这会让事情更清楚。 谢谢!我认为这是解决方案。但看起来不能在由ошыщтю生成的词法分析器中使用前瞻,所以我需要找到另一个解决方案。还是谢谢!【参考方案2】:

我认为您正在编写一种模板语言,您可能希望拆分这些字符,对吗?如果是这样,那么你就拆分正则表达式:(&lt;||%)

使用http://www.regexr.com/ 了解有关正则表达式的更多信息。

【讨论】:

我不分裂。我正在解析,所以我需要匹配除此符号之外的任何内容。 @AntonMedvedev 如果您知道这些标记在哪里(并且大多数正则表达式引擎确实会告诉您匹配的位置),那么您也已经掌握了它们之间的所有内容。寻找一个标记的结束位置和下一个标记的开始,你就有了文本的开始和结束位置。 @hvd 是的,这就是我应该写的:-)

以上是关于正则表达式:匹配除“<”、“”和“%”之外的任何内容的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配除特定路径之外的所有https URL

正则表达式 - 如何匹配除特定模式之外的所有内容

什么正则表达式将匹配除逗号','或分号';'之外的每个字符?

正则表达式匹配除 5 之外的所有数字字符

正则表达式:匹配除一个单词之外的所有内容[重复]

正则表达式:匹配除特定模式之外的所有内容