使用Java中的正则表达式,为什么我应该编写"\n"
来定义换行符和"\\s"
来定义空格字符?
为什么反斜杠的数量不同?
答案 0 :(得分:7)
Java自己进行字符串解析,将其从代码转换为内存中的内部字符串,然后将字符串发送到正则表达式解析器。
Java将2个字符\n
转换为换行符(ASCII代码0x0A
),将\\s
中的前2个(!)字符转换为单个反斜杠:\s
。现在此字符串被发送到正则表达式解析器,并且由于正则表达式识别其自己的特殊转义字符,因此它将\s
视为"任何空格& #34;
此时,代码\n
已经存储为单个字符"换行",正则表达式不再处理它。
由于正则表达式也将集合\n
识别为"换行符#34;,您还可以在Java字符串中使用\\n
- Java转换将\\
转义为单个\
,然后正则表达式模块找到\n
,它(再次)被转换为换行符。
答案 1 :(得分:2)
Java字符串具有一组允许的escape sequences,其中" \ n"是一个,但" \ s"不是。字符串不能理解空格的正则表达式简写。您可能正在将Java字符串传递给RegExp
构造函数,因此为了传递" \ s"作为一个字符串,你必须逃避" \"加倍。
答案 2 :(得分:2)
\
是许多语言中的特殊字符(在Java中,它在String
或char
中很特殊)或者像regex这样的工具。
在String
或char
中,它用于创建您通常无法写入的其他特殊字符。使用\x
x
表示您可以创建的特殊字符
\t
标签\b
退格\n
换行\r
回车\f
formfeed 或逃避其他特殊字符
\'
单引号('
在char
中很特殊,因为它代表char开始和结束的位置,所以要实际写出'
字符,你需要逃脱把它写成
here we start creating character
| here we end creating character
↓ ↓
'\''
↑↑
here we created literal of '
\"
双引号 - 与\'
中的char
类似,字符串"
代表其开始和结束的位置,因此放置"
文字到字符串(实际上能够写它)你需要逃避它
here we start creating String
| here we end creating String
↓ ↓
"\""
↑↑
here we created literal of "
\\
反斜杠 - 由于\
是用于创建其他特殊字符的特殊字符,因此必须有一种非特殊字符的方法,因此我们实际上可以将\
打印为简单的文字。
问题:如何编写代表day\night
的字符串?如果你以"day\night" it will be interpreted as
天[换行符] ight`的方式写出这样的字符串。
因此,在许多语言中代表\
文字,在它之前添加另一个\
以逃避它。因此,代表day\night
的字符串需要写为"day\\night"
(现在\
\n
中的\n
被转义,因此它不再代表\
- 换行符 - 而是连接n
和\s
个字符)
如果正则表达式表示将接受任何空格的字符类,则需要实际传递\s
。
但是代表"\\s"
的字符串需要写成\
,因为前面在字符串\s
中提到的是特殊的并且需要转义。
如果您将"\s"
写为{{1}},那么您将获得