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

yos*_*ssi 4 regex string pattern-matching

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

例如

对于这个字符串,我会得到 true - "if 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 源代码中尝试它,它似乎工作正常。

Jus*_*gan 5

听起来您想匹配包含>但不包含<. 这种模式将做到这一点:

/^(?=.*>)[^<]+$/
Run Code Online (Sandbox Code Playgroud)

但是,我很好奇您为什么要这样做。这听起来很可疑,就像您试图用正则表达式解析 HTML 一样,这通常是一个坏主意。

编辑:

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

如果您的所有模板声明都遵循该<[0-9]+template>模式,您可以这样做:

/^.*(?<!<\d+template)>.*$/
Run Code Online (Sandbox Code Playgroud)

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

a=b<c>d;
Run Code Online (Sandbox Code Playgroud)

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