当前位置: 首页 > 面试题库 >

Java正则表达式转义字符

董哲
2023-03-14
问题内容

当匹配某些字符(例如换行符)时,可以使用正则表达式“ \\ n”或仅使用“ \ n”。例如,以下将字符串html" target="_blank">拆分为行数组:

String[] lines = allContent.split("\\r?\\n");

但是以下内容同样适用:

String[] lines = allContent.split("\r?\n");

我的问题:

上面两个是 完全 一样地工作,还是有细微的差别?如果是后者,能否举个例子,说明您得到不同的结果?

还是仅在[可能/理论]表现上有所不同?


问题答案:

在当前情况下没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后有效的转义字符("\n""\r"等)和 正则表达式转义序列
文字 反斜杠的帮助下形成(即Java字符串中的双反斜杠)。文字)和一个有效的正则表达式转义字符("\\n""\\d",等)。

"\n"转义序列 )是文字LF(换行符),并且"\\n"是与LF符号匹配的正则表达式转义序列。

"\r"转义序列 )是文字CR(回车),并且"\\r"是与CR符号匹配的正则表达式转义序列。

"\t"转义序列 )是文字的制表符,"\\t"也是与制表符匹配的正则表达式转义序列。

有关 正则表达式 转义的受支持列表,请参见Java
regex文档
中的列表。
__

但是,如果使用Pattern.COMMENTS标志(用于引入注释并很好地格式化模式,使regex引擎忽略模式中所有未转义的空格),则需要在Java字符串文字中使用"\\n""\\\n"定义换行符(LF)。和"\\r""\\\r"定义回车(CR)。

查看Java测试:

String s = "\n";
System.out.println(s.replaceAll("\n", "LF")); // => LF
System.out.println(s.replaceAll("\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\\\n", "LF")); // => LF
System.out.println(s.replaceAll("(?x)\n", "<LF>")); 
// => <LF>
//<LF>

为什么最后一个产生<LF>+ newline +
<LF>?因为"(?x)\n"等于"",所以是一个空模式,它与换行符之前和之后的空格匹配。



 类似资料:
  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 转义字符串以在正则表达式中使用。 使用 String.replace() 来转义特殊字符。 const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); escapeRegExp('(test)'); // \\(test\\)

  • 问题内容: 我正在尝试在另一个字符串中替换字符串“ []”的第一个匹配项: aString.replaceFirst(“ []”,“等等”); 我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未封闭字符类 [和]显然是元字符,但是当我尝试使用\来转义它们时,eclipse抱怨说这不是有效的转义序列。 我看过但找不到,我想念什么? 谢谢 问

  • 问题内容: Java或任何开放源代码库中是否有任何方法可以转义(不引用)特殊字符(元字符),以便将其用作正则表达式? 动态构建正则表达式非常方便,而不必手动转义每个字符。 例如,考虑一个简单的正则表达式,它匹配带小数点的数字,例如,以及以下代码: 毫不奇怪,以上代码产生的输出是: 也就是说,匹配项(但是“动态”构建的)不匹配(相反,它与文字字符串匹配)。 那么,有没有一种方法可以自动转义每个正则表

  • Java 或任何开源库中是否有任何方法可以转义(不引用)特殊字符(元字符),以便将其用作正则表达式? 这在动态构建正则表达式时非常方便,而无需手动转义每个单独的字符。 例如,考虑一个简单的正则表达式,如 \d \.,它匹配小数点()的数字,以及以下代码: 毫不奇怪,上述代码产生的输出是: 也就是说,匹配但(它是“动态”构建的)不匹配(相反,它匹配文字字符串)。 那么,有没有一种方法可以自动转义每个

  • 我肯定这已经张贴之前,但我有麻烦找到一个答案。