正则表达式元字符(.)和普通点?

在 JavaRegEx 中,如何找出我们在任何句子中使用的元字符 .(点)和普通点之间的区别。如何处理这种情况的其他元字符太喜欢(*+\d,...)

270643 次浏览

用反斜杠转义特殊字符。\.\*\+\\d等等。如果您不确定,您可以避免任何非字母字符,无论它是否特殊。有关更多信息,请参见 Javadoc for java.util.regex. Pattern

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

Perl 风格的正则表达式(Java 正则表达式引擎或多或少基于此)将下列字符视为特殊字符:

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

]^-\对字符类([...])的 在里面有特殊的意义。

因此,您需要根据上下文(或者,在字符类的情况下,将它们放置在不会被误解的位置)来转义这些(并且只转义这些)符号。

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

另一些则会导致错误的结果,例如,在佩尔,\<被解释为字面的 <,但在 egrep中,它的意思是“词边界”。

因此,编写 -?\d+\.\d+\$来匹配 1.50$-2.00$等和 [(){}[\]],用于匹配所有类型的括号/括号/括号的字符类。

如果需要将用户输入字符串转换为 regex 安全的形式,请使用 java.util.regex.Pattern.quote

延伸阅读: Jan Goyvaert 的博客 RegexGuru 介绍如何逃避元人物

我想匹配一个以“ . *”结尾的字符串 为此,我不得不使用以下方法:

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

如果你仔细想想就会觉得有点傻: D 就是这个意思。在字符串的开头,可以有任何字符零次或多次后跟一个点在字符串的末尾加上一个星号(*)。

我希望这个能派上用场,谢谢法比安的反斜杠。

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

但我发现了这个:

在 javaregexp 中转义一个点写 [.]

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

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 * 是为了考虑空格并只给出所需的拆分字符串。

如果你想结束,检查你的句子是否以“ . 那你就得加上] $结束。

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

我试图使用 .folder进行分割。对于这个用例,使用 \\.folder[.]folder的解决方案不起作用。

下面的代码对我很有用

String[] pathSplited = Pattern.compile("([.])(folder)").split(completeFilePath);