Answers:
如果要使正则表达式中的点或其他具有特殊含义的字符成为普通字符,则必须使用反斜杠对其进行转义。由于Java中的正则表达式是普通的Java字符串,因此您需要转义反斜杠本身,因此需要两个反斜杠,例如\\.
Perl样式的正则表达式(Java regex引擎或多或少基于正则表达式)将以下字符视为特殊字符:
.^$|*+?()[{\
在角色类别之外有特殊的意义,
]^-\
在字符类([...]
)中有特殊含义。
因此,您需要根据上下文来转义那些(并且仅那些)符号(或者,对于字符类,将它们放置在不会被误解的位置)。
不必要地转义其他字符可能会起作用,但是某些正则表达式引擎会将其视为语法错误,例如 \_
将导致.NET错误。
其他一些会导致错误的结果,例如在Perl中\<
被解释为文字<
,但是在egrep
它的意思是“单词边界”。
所以写-?\d+\.\d+\$
匹配1.50$
,-2.00$
等等和[(){}[\]]
为一个字符类匹配各种支架/支架/括号。
如果需要将用户输入的字符串转换为正则表达式安全的形式,请使用java.util.regex.Pattern.quote
。
用反斜杠转义特殊字符。\.
,\*
,\+
,\\d
,等。如果不确定,则可以转义任何非字母字符,无论是否特殊。有关更多信息,请参见javadoc.java.util.regex.Pattern的javadoc。
这是您可以直接复制粘贴的代码:
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 *可以考虑空格,只给您所需的分割字符串。
如果要结束检查句子是否以“。”结尾,则必须在模式末尾添加[\。\ ] $。