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

时间:2011-06-14 18:44:04

标签: regex string pattern-matching

我需要一个正则表达式,以便在搜索“>”时大于。

例如

对于这个字符串我会得到 - “如果x> 2”

对于这个字符串,我会得到错误的“<template>

我试过这个 - [^<][a-zA-Z0-9_]+[a-zA-Z0-9_ ]*> 作为正则表达式 但问题是它找到了匹配的子字符串 例如,在<template>中,它找到template>并返回true。

感谢。

修改

我正在使用这个正则表达式[^<a-zA-Z0-9_][a-zA-Z0-9_]+[ ]*>尝试了整个firefox 1.0源代码,它似乎工作正常。

2 个答案:

答案 0 :(得分:3)

听起来您想匹配包含>但不包含<的行。这种模式会做到这一点:

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

但是,我很好奇你为什么要这样做。这听起来很可疑,就像你正试图用正则表达式解析HTML一样, is usually A Bad Idea.

编辑:

现在它更清楚你正在尝试做什么,但是你应该意识到这推动了正则表达式的能力极限。他们无法真正区分模板声明和带尖括号的文本之间的区别,但如果您知道模板声明都匹配一个非常特定的模式,那么您可以很好地捕获它们。

如果您的所有模板声明都遵循<[0-9]+template>模式,则可以执行以下操作:

/^.*(?<!<\d+template)>.*$/

如果您的模板不遵循这样严格的约定,那么您需要一个真正的C ++解析器。正则表达式基本上不可能区分模板声明和它之间的区别:

a=b<c>d;

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

答案 1 :(得分:3)

正则表达式似乎是您正在尝试的工作的错误工具。您可能需要一个完整的C ++解析器来可靠地区分“&gt;”大于运营商 来自“&gt;”模板分隔符,或“&gt;”作为字符串文字或评论的一部分。