这些类似的Java正则表达式之间的区别是什么?

时间:2010-11-11 18:52:15

标签: java regex

这三个相关的Java正则表达式只是用于执行相同操作的不同语法吗?

String resultString = subjectString.replaceAll("(?m)^\\d+\\.\\s*", "");
String resultString = subjectString.replace("^[0-9]+\\. *", "");
String resultString = subjectString.replaceAll('\\d+\.\\s+', '');

3 个答案:

答案 0 :(得分:3)

replace不接受正则表达式;它接受一个文字字符串(即将真正搜索那些字符)。 replaceAll接受正则表达式。

第三个无效,因为使用了单引号。单引号表示char的单个字符。双引号创建String s。

的字符串(多个字符)

答案 1 :(得分:3)

不,他们是不同的:

  • (?m)^\\d+\\.\\s*匹配
    • 一行开头的一个或多个数字(注意(?m)中的 m 修饰符),然后是
    • 文字.,后跟
    • 或更多空格字符(相当于[ \t\n\x0B\f\r]);
  • ^[0-9]+\\. *匹配
    • 字符串的一个或多个数字,后跟
    • 文字.,后跟
    • 更多空格;
  • \\d+\.\\s+匹配
    • 任意位置的一个或多个数字,然后是
    • 文字.,后跟
    • 一个或更多空格字符

除此之外,作为Adrian Smith has notedreplace不期望正则表达式,而是单个 char CharacterSequence String 实现了该接口。)

答案 2 :(得分:0)

关闭,每个都替换一个数字后跟一个句点,然后是 white-space ,即11.。但每个人都有细微差别:

第一个将替换要求数字位于一行的开头,而空白可以是任何东西,即一个标签。

如上所述,第二个无效,但如果是replaceAll(),则空格只能是空格字符。

第三个不必位于该行的开头,并将替换任何空白字符,如第一个。

其他差异只是语法。