java - Ctrl-M 的正则表达式问题

标签 java regex

我想计算以下内容:

boolean b = "\u000D".matches("\\cM");

但是编译器给我:

unclosed string literal
illegal character: \92
illegal character: \92
unclosed string literal
not a statement

为什么?该文字不是有效的 unicode Ctrl-m unicode 代码???

最佳答案

unclosed string literal 的问题是因为the \uXXXX sequences are resolved before lexing .所以

boolean b = "\u000D".matches("\\cM");

成为

boolean b = "
".matches("\\cM");

这是无效的 Java 代码。 (是的,这也意味着您可以编写 String foo =\u0022\u0021\u0022; 并正确编译。)

如果你改写

boolean b = "\r".matches("\\cM"); // \r == \u000D

然后代码运行并返回 true

关于java - Ctrl-M 的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193622/

相关文章:

php - preg_match_all 仅返回一个匹配项

java - 在activiti源代码中更新postgres数据库属性

java - 如何在套接字级别拦截 Tomcat 请求?

java - java中的数字和字母二叉树

java - 正则表达式匹配一个句子

javascript - 商品及服务税识别号 (GSTIN) 的正则表达式

javascript - 如何使用正则表达式在多行上选择包含任意字符的值?

java文件和目录权限奇怪的行为

java - 了解Java声音API : Finding MIC on Mixer

c# - c# 中货币值(value)的 RegEx 验证