我需要一个正则表达式来在eclipse中执行搜索,以匹配以$ {开头的所有字符串并以#结尾但不应该在两者之间使用pageContext。 例如
$ {requestScope.user}
$ {sessionScope.user}
应匹配
但 $ {pageContext.request} 不应该
经过所有努力,我已经制作了这个正则表达式(\ $ {),它匹配以 $ {开头的字符串,但有些字符串不符合我的要求。不胜感激。
答案 0 :(得分:2)
您可以使用否定前瞻来排除特定匹配:
\$\{(?!pageContext\.).*?\}
^^^^^^^^^^^^^^^^
(?!pageContext\.)
前瞻将使{
跟随pageContext.
的所有匹配失败。此外,您可以使用[^{}]*
代替.*?
。
请参阅regex demo
模式详情:
\$
- 文字$
\{
- 文字{
(?!pageContext\.)
- 如果pageContext.
立即跟{
.*?
- 换行以外的任何0 +字符(或[^{}]*
- 除{
和}
以外的零个或多个字符\}
- 文字}
。注意强>:
如果您需要避免将任何${...}
子字符串与其中的pageContext.
匹配,请使用
\$\{(?![^{}]*pageContext\.)[^{}]*\}
^^^^^^^^^
此处,前瞻中的[^{}]*
会在pageContext.
和{
以外的任何0 +字符之后查找}
。
答案 1 :(得分:0)
展望未来或者看后面是昂贵的。你应该更喜欢可选的匹配技巧:
\$\{(?:.*pageContext.*|(.*))\}
为了避免混淆,让我指定这将匹配任何字符串与" $ {"前缀和"}"后缀,但如果该字符串包含" pageContext" 1 st 捕获将为空。 如果1 st 捕获非空,则您有一个符合条件的字符串。