正则表达式:匹配除“<”、“”和“%”之外的任何内容
Posted
技术标签:
【中文标题】正则表达式:匹配除“<”、“”和“%”之外的任何内容【英文标题】:Regex: match anything but not "<", "" and "%"正则表达式:匹配除“<”、“”和“%”之外的任何内容 【发布时间】:2016-01-16 00:44:58 【问题描述】:我尝试实现词法分析器并尝试创建正则表达式,它将匹配任何内容,但不匹配以下内容:
%我正在尝试:
[^(<||%)]+
但它也不看蚂蚁单“”和“%”符号。
可以用正则表达式吗?
输入:“foo bar
【问题讨论】:
所以假设文本是a b
。从头开始,有一个子字符串a
,不包含<
,不包含
,不包含%
。所以按照你的逻辑应该匹配。但我很确定这不是你想要的。 (如果您认为我过于字面,请记住,如果您创建的正则表达式在您的问题中具有确切的标准,那么这种过于字面的解释正是计算机会给出的。)
前瞻?我只需要匹配“a”和“b”。
我猜你会想要“a”和“b”,但是是的,无论哪种方式,都可以通过前瞻来实现。但我认为最简单的方法是做 mevdschee 回答的事情。
那不是一个选项然后你创建词法分析器(如 flex)。
【参考方案1】:
您可以使用基于环视的正则表达式:
(?<=\s|^)(?![%]|<)\S+
(?![%])
是负前瞻,以匹配不是 或
%
的任何非空格文本。
RegEx Demo
【讨论】:
太棒了!如何也匹配空格而不是“ 好的,您能否提供一些示例输入和有问题的预期匹配项。这会让事情更清楚。 谢谢!我认为这是解决方案。但看起来不能在由ошыщтю生成的词法分析器中使用前瞻,所以我需要找到另一个解决方案。还是谢谢!【参考方案2】:我认为您正在编写一种模板语言,您可能希望拆分这些字符,对吗?如果是这样,那么你就拆分正则表达式:(<||%)
使用http://www.regexr.com/ 了解有关正则表达式的更多信息。
【讨论】:
我不分裂。我正在解析,所以我需要匹配除此符号之外的任何内容。 @AntonMedvedev 如果您知道这些标记在哪里(并且大多数正则表达式引擎确实会告诉您匹配的位置),那么您也已经掌握了它们之间的所有内容。寻找一个标记的结束位置和下一个标记的开始,你就有了文本的开始和结束位置。 @hvd 是的,这就是我应该写的:-)以上是关于正则表达式:匹配除“<”、“”和“%”之外的任何内容的主要内容,如果未能解决你的问题,请参考以下文章