如何编写一个将第一行放在一个组中的正则表达式,然后是第二个组中的其他所有内容?
答案 0 :(得分:2)
根据风味,这样的事情应该有效:(?-s)(.*)(?s)(.*)
。这匹配并捕获(.*)
两次,第一次关闭“单线”模式,第二次关闭它。您甚至可能希望将整个模式锚定在\A
和\Z
。
在Java中:
String text =
"first line\r" +
"second line\r\n" +
"third line etc";
System.out.println(
text.replaceFirst(
"(?-s)(.*)(?s)(.*)",
"FIRST <<<$1>>>\nREST <<<$2>>>"
)
);
FIRST <<<first line>>>
REST <<<
second line
third line etc>>>
根据你实际做的事情(例如,逐行读取文件),可能存在更好的解决方案。
答案 1 :(得分:1)
如果您没有设置dotmatchesall(或单行)标记,.
与换行符不匹配,则只需执行
(.*)\r\n([\s\S]*)
请注意,\r\n
需要更改为您的文件用于其换行标记的任何内容。那将是Linux上的\n
或Mac上的\r
(根据Wikipedia)。
答案 2 :(得分:1)
/\A([^\n]*)\n(.*)\Z/s
答案 3 :(得分:-1)
这似乎有效:
^(.*)$([\s\S]*)