有人可以解释一下这个正则表达式吗? ^(?=。* prodCode =)。* $

时间:2012-07-20 07:38:49

标签: java regex

有人可以解释这个正则表达式吗?

^(?=.*prodCode=).*$

3 个答案:

答案 0 :(得分:9)

来自this nice regex explainer

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                      the beginning of the string
--------------------------------------------------------------------------------
  (?=                    look ahead to see if there is:
--------------------------------------------------------------------------------
  .                      any character except \n
--------------------------------------------------------------------------------
  prodCode=              'prodCode='
--------------------------------------------------------------------------------
  )                      end of look-ahead
--------------------------------------------------------------------------------
  .                      any character except \n
--------------------------------------------------------------------------------
  $                      before an optional \n, and the end of the string

修改

由于问题文本中的正则表达式已更改,解释中的倒数第二行将更改为:

--------------------------------------------------------------------------------
  .*                     any character except \n (0 or more times (matching
                         the most amount possible))
--------------------------------------------------------------------------------

答案 1 :(得分:1)

从行的searhinng开始,在prodCode=之前定位任何符号。 (?=)表示只检查位置不匹配。所以在你的情况下,如果在行中存在类似any symbol + prodCode=的字符串,那么我们匹配整行,否则返回false。

答案 2 :(得分:1)

如果字符串在其中的任何位置都有prodCode=并匹配整个字符串,则匹配。

编写它的另一种方法(粗略地说,滥用方法返回值作为正则表达式)将是

if (s.indexOf("prodCode=") != -1)
    return s;