Regex 正则表达式匹配以字符开头和结尾的字符串
我需要一个正则表达式来在eclipse中执行搜索,以匹配以${开头并以}结尾的所有字符串,但这两个字符串之间不应该有pageContext。 比如说 ${requestScope.user} ${sessionScope.user} 应该匹配 但${pageContext.request}不应Regex 正则表达式匹配以字符开头和结尾的字符串,regex,eclipse,Regex,Eclipse,我需要一个正则表达式来在eclipse中执行搜索,以匹配以${开头并以}结尾的所有字符串,但这两个字符串之间不应该有pageContext。 比如说 ${requestScope.user} ${sessionScope.user} 应该匹配 但${pageContext.request}不应 经过我的努力,我制作了这个正则表达式,它匹配以${开头的字符串,但有些方法不符合我的要求。如有任何帮助,我们将不胜感激。您可以使用负前瞻排除特定的匹配: \$\{(?!pageContext\.).*?\
经过我的努力,我制作了这个正则表达式,它匹配以${开头的字符串,但有些方法不符合我的要求。如有任何帮助,我们将不胜感激。您可以使用负前瞻排除特定的匹配:
\$\{(?!pageContext\.).*?\}
^^^^^^^^^^^^^^^^
(?!pageContext\)
前瞻将使所有匹配失败,其中{
后跟pageContext.
。此外,您可以使用[^{}]*
而不是*?
见
图案细节:
-文字\$
$
-文字\{
{
-如果(?!pageContext\)
立即跟随pageContext,则匹配失败。
{
-除换行符以外的任何0个以上字符(或*?
-除[^{}]*
和{
以外的零个或多个字符)}
-文字\}
}
${…}
子字符串与pageContext匹配。
其中的任何位置,请使用
\$\{(?![^{}]*pageContext\.)[^{}]*\}
^^^^^^^^^
在这里,前瞻中的
[^{}]*
将查找pageContext。
在任何0+字符之后,而不是{
和}
向前看或向后看都是昂贵的。您应该更喜欢可选的匹配技巧:
\$\{(?:.*pageContext.*|(.*))\}
为了避免混淆,让我指定这将匹配任何带有“${”前缀和“}”后缀的字符串,但如果该字符串包含“pageContext”第一个捕获将为空。如果第一个捕获为非空,则有一个字符串与您的条件匹配。非常感谢它的工作原理,但它正在选择整个字符串,如果我只想选择${和}在上述条件下,整个string@Mckenzie这个正则表达式实际上不匹配任何东西,这意味着无论您运行它,它都会返回匹配的字符串,这取决于正则表达式的使用方式添加捕获可能会做什么,也可能不会做什么,但是您可以通过这样做来捕获匹配:
(\$\{(?!pageContext\).\)
@Mckenzie:虽然可以将${
后面不跟pageContext
与\$\{(?!pageContext\)
匹配,但不能使用Eclipse正则表达式引擎匹配前面不跟的}
{pageContext.
因为它不支持无限宽度lookbehind.FYI:最快的解决方案是。或者如果{…}
内部可以有{
。它也会选择${pageContext.request},但它不会not@Mckenzie正如您从live示例中看到的,它没有捕获“${pageContext.request}”这只会在匹配的情况下捕获。您如何使用此正则表达式的结果?回溯比我的任何锚定前瞻都要昂贵。64步(我的)(或使用否定字符类的30步)与110步(您的)在相同的内容上。@Jonathan它正在捕获它,我正在用Wiktor提供的解决方案pls check测试它works@Mckenzie如果您查看“列表”选项卡,它会显示捕获和相应的输入。需要注意的是,我的每一行都将匹配前缀为“${”和“}”的行后缀,但如果在大括号之间找到“pageContext”,则捕获将为空: