模式匹配任何字符,直到边界字符

时间:2013-12-03 21:12:30

标签: java regex

我有字符串: String myStr =“Operation = myMethod \ nDataIn = A; B; C; D \ nDataOut = X; Y; ​​Z \ n”

我希望匹配DataIn。

我有以下代码:

Pattern pattern = Pattern.compile("Operation=myMethod.*DataIn=(.*)?\n", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find()) {
  return matcher.group(1);
}

问题是它正在返回:“A; B; C; D \ nDataOut = X; Y; ​​Z \ n”

我尝试了模式:“Operation = myMethod。 DataIn =(。?\ n)” 然后它返回“A; B; C; D \ n”。我不希望返回最终的“\ n”。

4 个答案:

答案 0 :(得分:2)

将正则表达式中的(.*)替换为([^\n]*)以匹配换行符,或([^\b]*)匹配直到任何边界字符。

Pattern pattern = Pattern.compile("Operation=myMethod.*DataIn=([^\\n]*)?\n", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find()) {
  return matcher.group(1);
}

字符类中的[^...]构造,表示匹配此集合中不存在的任何字符。

答案 1 :(得分:1)

您可以使用:

Pattern pattern = Pattern.compile("Operation=myMethod.*?DataIn=([^\\n]*)", Pattern.DOTALL);

这将匹配组#1中的0个或更多字符,直到匹配\n

答案 2 :(得分:0)

尝试使用:

<强>模式

(?<=DataIn=)(.+?)(?=\\n)

<强> CODE

Pattern pattern = Pattern.compile("(?<=DataIn=)(.+?)(?=\\n)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find()) 
{
   return matcher.group(1);
}

<强> INPUT

Operation=myMethod\nDataIn=A;B;C;D\nDataOut=X;Y;Z\n

<强>输出

A;B;C;D

答案 3 :(得分:0)

正则表达式

(?s)(?<=DataIn=)(.+?)(?=\n)

描述

Regular expression visualization