Java RegEx元字符(.)和普通点?

Jav*_*ser 141 java regex

在Java RegEx中,如何.在任何句子中找出(点)元字符和普通点之间的区别.如何处理这种情况的其他元字符太像(*,+,/d,...)

Fab*_*eeg 263

如果您希望正则字符中具有特殊含义的点或其他字符是普通字符,则必须使用反斜杠将其转义.由于Java中的正则表达式是普通的Java字符串,因此您需要转义反斜杠本身,因此需要两个反斜杠,例如\\.

  • 请注意,是否要逃避反斜杠取决于您如何提供正则表达式.如果硬编码,你需要使用:"\\." ,如果从原始源(例如文本文件)读取,则只使用一个反斜杠:\. (15认同)

Kae*_*ael 19

其他成员提出的解决方案对我不起作用.

但我发现了这个:

在java regexp写中转义一个点 [.]

  • 同样,`\\.` 对我不起作用:`\.` 抱怨 `.` 不需要转义,`\\.` 让它认为它是 `\.` 而不是 `.` , `\\.` 并且构建器抛出了一个错误,`[.]` 是唯一有效的方法。 (2认同)

Tim*_*ker 16

Perl样式的正则表达式(Java正则表达式引擎或多或少基于它)将以下字符视为特殊字符:

.^$|*+?()[{\字符类之外有特殊含义,

]^-\字符类([...])中有特殊含义.

所以你需要根据上下文(或者在字符类的情况下,将它们放在不能被误解的位置)来逃避那些(并且只有那些)符号.

不必要地转义其他字符可能会起作用,但是一些正则表达式引擎会将其视为语法错误,例如\_会在.NET中导致错误.

其他一些会导致错误的结果,例如在Perl中\<被解释为文字<,但在egrep其中意味着"单词边界".

所以写-?\d+\.\d+\$匹配1.50$,-2.00$等,并[(){}[\]]为一个字符类匹配各种支架/支架/括号.

如果需要将用户输入字符串转换为正则表达式安全表单,请使用java.util.regex.Pattern.quote.

进一步阅读:Jan Goyvaert的博客RegexGuru关于逃避元字符


Chr*_*röm 5

使用反斜杠转义特殊字符。\.\*\+\\d, 等等。如果您不确定,您可以转义任何非字母字符,无论它是否特殊。有关详细信息,请参阅java.util.regex.Pattern 的 javadoc 。