繁体   English   中英

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

[英]What's the difference between these similar Java regexes?

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

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

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

第三个无效,因为使用了单引号。 单引号代表char各个字符。 双引号创建的字符串(多个字符)为String

不,它们是不同的:

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

除此之外,正如Adrian Smith所指出的那样replace并不期望使用正则表达式,而是期望使用单个charCharacterSequenceString实现该接口)。

关闭,每个替换一个数字,后跟一个句点,后跟空白 ,即11. 但是每个都有细微的差别:

第一个替换将要求数字位于行的开头,并且空格可以是任何内容,即制表符。

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

第三个字符不必在行的开头,并且将替换任何空格字符,例如第一个。

其他区别只是语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM