我已经阅读了手册,最后有一个练习:
仅当该人的名字和姓氏相同时,才使用反向引用来编写与人名相匹配的表达式.
我写了下一个程序http://pastebin.com/YkuUuP5M
但是当我编译它时,我收到一个错误:
PersonName.java:18: illegal escape character
p = Pattern.compile("([A-Z][a-zA-Z]+)\s+\1");
^
Run Code Online (Sandbox Code Playgroud)
如果我以这种方式重写18行:
pattern = Pattern.compile(console.readLine("%nEnter your regex: "));
Run Code Online (Sandbox Code Playgroud)
并在控制台中编写模式,然后程序运行正常.为什么我不能像第一个程序一样使用该模式,是否有某种方法来解决它?
您希望将此文本转换为字符串:
([A-Z][a-zA-Z]+)\s+\1
Run Code Online (Sandbox Code Playgroud)
但是,\在Java源代码中的字符串文字中是用于转义的字符(例如,"\ t"表示选项卡).因此,您需要在字符串文字中使用"\",以在结果字符串中以单个反斜杠结束.所以你要:
"([A-Z][a-zA-Z]+)\\s+\\1"
Run Code Online (Sandbox Code Playgroud)
请注意,没有任何特定于正则表达式的内容.任何你想表达包含在Java字符串文字反斜杠的字符串时,你需要转义反斜线.正则表达式和Windows文件名只是最常见的情况.
| 归档时间: |
|
| 查看次数: |
6642 次 |
| 最近记录: |