在Java RegEx中,如何找出.
(点)元字符和普通点之间的区别,正如我们在任何句子中使用的那样。如何处理其他元字符的这种情况(例如*
,+
,/d
,...)
答案 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 [] []数组的访问器方法来使用('。')放置单个点。