Java 在多行上匹配以某些字符开头和结尾的文本
我有一个类似的源文件Java 在多行上匹配以某些字符开头和结尾的文本,java,regex,Java,Regex,我有一个类似的源文件 String some_words_come_here{ //some string lines //some string lines //some string lines //some string lines }; 我在java中使用它 Pattern.compile("(?m)^Strin.+\\};$", Pattern.MULTILINE | Pattern.DOTALL); 但这并不奏效 与 我拿到绳子,直到绳子的尽头。
String some_words_come_here{
//some string lines
//some string lines
//some string lines
//some string lines
};
我在java中使用它
Pattern.compile("(?m)^Strin.+\\};$", Pattern.MULTILINE | Pattern.DOTALL);
但这并不奏效
与
我拿到绳子,直到绳子的尽头。因为+
在行尾退出
Pattern.compile("^String[^}]+\\};$", Pattern.MULTILINE);
除非这些行中的某个地方有}
(除非字符串前面或后面有空格;
)
说明:
^String
在行首开始匹配;按字面意思匹配字符串
[^}]+
匹配除}
之外的任何字符的一个或多个匹配项
\\}$代码>匹配}代码>和行尾。反斜杠转义}
,由于反斜杠本身也需要在Java字符串中转义,因此需要两个
^String .*{\r*[^.*$]*};$
这适用于Kodos工具
Java中的测试:
package mytest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("String some_words_come_here{").append("\n")
.append(" //some string lines\n")
.append(" //some string lines\n")
.append(" //some string lines\n")
.append("};\n");
String regex = "^String .*\\{\\r*[^.*$]*\\};$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sb.toString());
System.out.println(m.find());
System.out.println(m.group(0));
}
}
输出:
true
String some_words_come_here{
//some string lines
//some string lines
//some string lines
};
第一个“不好用”是以什么方式出现的?我的意思是,我得到了整个字符串的大部分。。。。它与}的第一个计数不匹配;我很抱歉,但我是新加入regex的,我不知道如何关闭该(?m)或它应该如何关闭。我在某个地方读到过,它也是一个字符串中新行的开头,^表示字符串的开头。所以请把你得到的东西贴出来<代码>模式。多行
将使^
和$
在行的开始/结束处匹配。这很有效。你能简单地解释一下这是如何工作的吗?特别是在[^}]+部分
true
String some_words_come_here{
//some string lines
//some string lines
//some string lines
};