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

时间:2010-09-09 08:26:04

标签: java regex

在Java RegEx中,如何找出.(点)元字符和普通点之间的区别,正如我们在任何句子中使用的那样。如何处理其他元字符的这种情况(例如*+/d,...)

8 个答案:

答案 0 :(得分:248)

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

答案 1 :(得分:17)

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

但我发现了这个:

在java regexp中写一个点来写[.]

答案 2 :(得分:15)

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

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

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

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

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

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

请写-?\d+\.\d+\$以匹配1.50$-2.00$等,并[(){}[\]]匹配与所有类型的括号/大括号/括号相匹配的字符类。

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

进一步阅读:Jan Goyvaert's blog RegexGuru on escaping metacharacters

答案 3 :(得分:4)

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

答案 4 :(得分:1)

我想匹配一个以“。*”结尾的字符串 为此我必须使用以下内容:

"^.*\\.\\*$"

如果你想一想,有点傻:D 这是什么意思。在字符串的开头,可以有任何字符零次或多次,后跟一个点“。”然后是字符串末尾的一个星号(*)。

我希望这对某人派上用场。感谢Fabian的反斜杠。

答案 5 :(得分:1)

以下是您可以直接复制粘贴的代码:

String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
   system.out.println(imageNameArray[i]);
}

如果错误地在“。”之前或之后留下空格怎么办?在这种情况下?考虑这些空间也是最好的做法。

String imageName = "picture1  . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
    for(int i =0; i< imageNameArray.length ; i++)
    {
       system.out.println(imageNameArray[i]);
    }

在这里,\\ s *用于考虑空格并仅为您提供所需的分割字符串。

答案 6 :(得分:0)

如果你想结束检查你的句子是否以&#34;。&#34;然后你必须在模式的末尾添加[\。\ ] $。

答案 7 :(得分:0)

我在JGrasp中做一些基本的数组,发现使用char [] []数组的访问器方法来使用('。')放置单个点。