这三个相关的Java正则表达式只是用于执行相同操作的不同语法吗?
String resultString = subjectString.replaceAll("(?m)^\\d+\\.\\s*", "");
String resultString = subjectString.replace("^[0-9]+\\. *", "");
String resultString = subjectString.replaceAll('\\d+\.\\s+', '');
答案 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 noted,replace
不期望正则表达式,而是单个 char 或 CharacterSequence ( String 实现了该接口。)
答案 2 :(得分:0)
关闭,每个都替换一个数字后跟一个句点,然后是 white-space ,即11.
。但每个人都有细微差别:
第一个将替换要求数字位于一行的开头,而空白可以是任何东西,即一个标签。
如上所述,第二个无效,但如果是replaceAll()
,则空格只能是空格字符。
第三个不必位于该行的开头,并将替换任何空白字符,如第一个。
其他差异只是语法。