Java正则expression式元字符(。)和普通的点?
在Java RegEx中,如何找出区别.
(点)元字符和正常点,正如我们在任何句子中使用的。 ( *
, +
, /d
,…)如何处理其他元字符的这种情况
如果要在正则expression式中使用特殊含义的点或其他字符作为普通字符,则必须用反斜线将其转义。 由于Java中的正则expression式是普通的Javastring,因此您需要自行转义反斜杠,所以您需要两个反斜杠,例如\\.
Perl风格的正则expression式(Java正则expression式引擎或多或less地基于此)将以下字符视为特殊字符:
.^$|*+?()[{\
字符类外有特殊含义,
]^-\
在字符类( [...]
)中有特殊的含义。
所以你需要根据上下文来逃避那些(而且只有那些)符号(或者在字符类的情况下,把它们放在不能被误解的位置)。
不必转义其他字符可能工作,但一些正则expression式引擎会将此视为语法错误,例如\_
将在.NET中导致错误。
其他一些会导致错误的结果,例如\<
<
在Perl中被解释为一个文字<
,而在egrep
则意味着“文字边界”。
所以,写一个匹配各种括号/大括号/小括号的字符类来匹配1.50$
,- -2.00$
等和[(){}[\]]
。
如果您需要将用户inputstring转换为正则expression式,请使用java.util.regex.Pattern.quote
。
进一步阅读: Jan Goyvaert关于转义元字符的博客RegexGuru
其他成员提出的解决scheme不适合我。
但是我发现这个:
在java中regexp写一个点[.]
用反斜杠转义特殊字符。 \.
, \*
, \+
, \\d
等等。 如果你不确定,你可能会逃避任何非字母字符,不pipe它是否特殊。 有关更多信息,请参阅java.util.regex.Pattern的javadoc 。
我想匹配以“。*”结尾的string。为此,我必须使用以下内容:
"^.*\\.\\*$"
如果你考虑一下,真是愚蠢的:D Heres是什么意思。 在string的开头,可以有零个或多个字符,后跟一个点“”。 然后在string的末尾加一个星号(*)。
我希望这能派上用场。 谢谢Fabian的反斜杠。
这里是代码,你可以直接复制粘贴:
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 *是考虑的空间,并给你只需要拆分的string。