如何从正则表达式中捕获文本?

时间:2018-01-22 18:42:02

标签: java regex

Select * from users u 
WHERE 1=1
[IF(!"<<user_email>>".eqauls(""))
  AND u.user_email like '<<user_email>>'
]
[IF(!"<<user_name>>".eqauls(""))
  AND u.user_name 
   like '<<user_name>>'
]

在上面的文字中。如何捕获[IF(...)模式之间的开始和结束位置?

我试过这个。但这对我不起作用:

Pattern p = Pattern.compile("(\\[IF\\(.*\\])",Pattern.DOTALL);

1 个答案:

答案 0 :(得分:1)

您必须使用非贪婪的.*?而不是贪婪的.*量词,除此之外您不需要开头和结尾括号(...)

Pattern p = Pattern.compile("\\[IF\\(.*?\\]", Pattern.DOTALL);
//-----------------------------------^^^

<强>输出

[IF(!"<<user_email>>".eqauls(""))
  AND u.user_email like '<<user_email>>'
]

[IF(!"<<user_name>>".eqauls(""))
  AND u.user_name 
   like '<<user_name>>'
]