正则表达式中的双正斜杠期

jah*_*ezz 3 java regex

我最近开始在Java中使用正则表达式,我遇到了一个奇怪的表达式.

问题要求找到仅包含字母和最多一个结束时期的"单词".例如,如果我输入字符串:

one two. wr7ng not1 three. nope..
Run Code Online (Sandbox Code Playgroud)

引擎会找到一个,两个和三个作为匹配的单词.该问题的给定解决方案是此模式:

for (String tok : s.split(" ")) {
  if (tok.matches("[a-zA-Z]+//.?")) {
    // code done to record successful match
  }
}
Run Code Online (Sandbox Code Playgroud)

这两个正斜杠是什么意思?我将这个表达式与这个表达式进

[a-zA-Z]+.?
Run Code Online (Sandbox Code Playgroud)

并且发现只有后者错误地接受了最后一个槽(周期)中的数字.这是唯一的区别吗?

Ira*_*ter 5

你确定它不是反斜杠吗?

  "[a-zA-Z]+\\.?"
Run Code Online (Sandbox Code Playgroud)

文字字符串中的两个反斜杠被解释为"在文字字符串中插入单个反斜杠".(作为惯例,在许多语言中,反斜杠anychar意味着"插入anychar").

当文字字符串被解释为正则表达式时,实际文本

         \.
Run Code Online (Sandbox Code Playgroud)

意思是"将'句号'作为文字字符匹配".

如果你没有反斜杠"转义字符",那么大多数Regexp引擎意味着"匹配任何字符".