正则表达式:如何组建第一线,然后另一组与其他所有组合?

时间:2010-07-08 12:29:38

标签: regex

如何编写一个将第一行放在一个组中的正则表达式,然后是第二个组中的其他所有内容?

4 个答案:

答案 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>>>"
    )
);

打印(as seen on ideone.com):

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]*)