正则表达式匹配字符串开头和结尾字符

时间:2016-08-02 13:20:26

标签: regex eclipse

我需要一个正则表达式来在eclipse中执行搜索,以匹配以$ {开头的所有字符串并以#结尾但不应该在两者之间使用pageContext。 例如

$ {requestScope.user}

$ {sessionScope.user}

应匹配

$ {pageContext.request} 不应该

经过所有努力,我已经制作了这个正则表达式(\ $ {),它匹配以 $ {开头的字符串,但有些字符串不符合我的要求。不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻来排除特定匹配:

\$\{(?!pageContext\.).*?\}
    ^^^^^^^^^^^^^^^^

(?!pageContext\.)前瞻将使{跟随pageContext.的所有匹配失败。此外,您可以使用[^{}]*代替.*?

请参阅regex demo

模式详情

  • \$ - 文字$
  • \{ - 文字{
  • (?!pageContext\.) - 如果pageContext.立即跟{
  • ,则匹配失败
  • .*? - 换行以外的任何0 +字符(或[^{}]* - 除{}以外的零个或多个字符
  • \} - 文字}

注意

如果您需要避免将任何${...}子字符串与其中的pageContext. 匹配,请使用

\$\{(?![^{}]*pageContext\.)[^{}]*\}
    ^^^^^^^^^  

此处,前瞻中的[^{}]*会在pageContext.{以外的任何0 +字符之后查找}

答案 1 :(得分:0)

展望未来或者看后面是昂贵的。你应该更喜欢可选的匹配技巧:

\$\{(?:.*pageContext.*|(.*))\}

Live Example

为了避免混淆,让我指定这将匹配任何字符串与" $ {"前缀和"}"后缀,但如果该字符串包含" pageContext" 1 st 捕获将为空。 如果1 st 捕获非空,则您有一个符合条件的字符串。