使用正则表达式进行模式匹配以查找大于符号

5
我需要一个正则表达式,以便如果我搜索">"大于号,我将得到以下结果:
例如,对于这个字符串,我会得到true - "if x> 2"
而对于这个字符串,我会得到false "

2
[a-zA-Z0-9_]+ 之后快速跟上 [a-zA-Z0-9_ ]* 就不再有意义。 - ssapkota
3
你将如何处理字符串 "x<2 and y>3"? - Alftheo
2
你使用的正则表达式方言/编程语言是什么? - Justin Morgan
1
请适当地格式化您的代码。谢谢! - Trufa
我正在使用Python,关于[a-zA-Z0-9_ ]*快速出现在[a-zA-Z0-9_]+之后,它是用来表示空格的 - 我猜我可以只用[ ]*代替第一个,对吗? - yossi
2个回答

5

听起来你想匹配包含 > 但不包含 < 的行。这个模式可以实现:

/^(?=.*>)[^<]+$/

然而,我很好奇你为什么想要这样做。听起来很像你正在试图使用正则表达式解析HTML,这通常是不明智的 编辑: 现在我们更清楚你想做什么了,但你应该知道,这超出了正则表达式的能力范围。它们无法真正区分模板声明和带有尖括号的文本,但如果你知道你的模板声明都匹配一个非常特定的模式,那么你可以相当不错地捕捉它们。
如果所有的模板声明都遵循<[0-9]+template>模式,你可以这样做:
/^.*(?<!<\d+template)>.*$/

如果您的模板不遵循这样严格的约定,那么您需要一个真正的C++解析器。对于正则表达式来说,很难区分模板声明和以下内容的区别:
a=b<c>d;

这是C++中有效的代码(我相信翻译为a = (b < c) > d;)。


1
我正在尝试在C源代码中查找大于符号,但我不想找到<templates>。 - yossi
1
@yossi - 好的。除非模板声明跨越多行,否则这个正则表达式应该可以做到。对于99.9%的情况来说,这应该是一个足够简单的任务,但如果你需要一个真正强大的解决方案,你将需要一个上下文感知的解析器(即实际理解C代码的东西)。 - Justin Morgan
那不起作用,我并不是想“匹配包含>但不包含<的行。”因为我应该找到像这样的东西“x<2和y>3”。 - yossi
@yossi - 你的所有模板都遵循<_template>的命名规范吗?它们在声明中都有单词“template”吗?我已经有一段时间没有使用C++了;嵌套括号是否可以(例如,<1template<2template>>)? - Justin Morgan
不,它们并不都包含“tmeplate”这个词。至于括号的嵌套,我不清楚。 - yossi
1
@yossi - 如果是这样的话,你可以通过正则表达式节省一些时间,但你真正需要的是一个C++解析器或者一个带有“查找所有引用”功能的IDE。请参见编辑。 - Justin Morgan

3

正则表达式似乎不是你试图完成的工作的正确工具。您可能需要一个完整的C++解析器来可靠地区分“>”大于运算符和“>”模板分隔符,或“>”作为字符串字面值或注释的一部分。


我想避免那个:),我不需要它100%的匹配。 - yossi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接