【发布时间】:2021-10-18 06:48:41
【问题描述】:
在Java RegEx 中,如何找出.(dot) 元字符和我们在任何句子中使用的普通点之间的区别。对于像 (*,+,\d,...) 这样的其他元字符如何处理这种情况
【问题讨论】:
在Java RegEx 中,如何找出.(dot) 元字符和我们在任何句子中使用的普通点之间的区别。对于像 (*,+,\d,...) 这样的其他元字符如何处理这种情况
【问题讨论】:
我在 JGrasp 中做一些基本的数组,发现使用 char[][] 数组的访问器方法可以使用 ('.') 来放置单个点。
【讨论】:
如果要结束检查句子是否以“.”结尾,则必须在模式末尾添加 [\.\]$。
【讨论】:
这是可以直接复制粘贴的代码:
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* 是为了考虑空格,只给你需要的拆分字符串。
【讨论】:
其他成员提出的解决方案对我不起作用。
但我发现了这个:
在 java regexp 中转义一个点,写[.]
【讨论】:
\\. 对我不起作用:\. 抱怨 . 不需要转义,\\. 让它认为它是 \. 而不是 @ 987654327@、\\\. 和构建器抛出错误,[.] 是唯一有效的方法。
\\. 为您提供\.,这是正则表达式需要将点视为文字点而不是任意字符匹配器的原因。
我想匹配一个以“.*”结尾的字符串 为此,我必须使用以下内容:
"^.*\\.\\*$"
如果你想起来有点傻:D 这就是它的意思。在字符串的开头可以有任何字符零次或多次,后跟一个点“。”后跟一个星号 (*) 在字符串的末尾。
我希望这对某人有用。感谢 Fabian 的反斜杠。
【讨论】:
"\\.\\*$"。如果对您无关紧要,则无需匹配字符串的开头。
Perl 风格的正则表达式(Java 正则表达式引擎或多或少基于)将以下字符视为特殊字符:
.^$|*+?()[{\在字符类之外有特殊意义,
]^-\ 在字符类 ([...]) 的内部 中具有特殊含义。
因此,您需要根据上下文转义那些(并且只有那些)符号(或者,在字符类的情况下,将它们放置在不会被误解的位置)。
不必要地转义其他字符可能会起作用,但一些正则表达式引擎会将其视为语法错误,例如\_ 将导致 .NET 中的错误。
其他一些会导致错误的结果,例如\< 在 Perl 中被解释为文字 <,但在 egrep 中表示“单词边界”。
所以写-?\d+\.\d+\$ 以匹配1.50$、-2.00$ 等,[(){}[\]] 用于匹配各种括号/大括号/圆括号的字符类。
如果您需要将用户输入字符串转换为正则表达式安全形式,请使用java.util.regex.Pattern.quote。
延伸阅读:Jan Goyvaert's blog RegexGuru on escaping metacharacters
【讨论】:
如果您希望正则表达式中的点或其他具有特殊含义的字符成为普通字符,则必须使用反斜杠对其进行转义。由于 Java 中的正则表达式是普通的 Java 字符串,因此您需要转义反斜杠本身,因此您需要两个反斜杠,例如\\.
【讨论】:
使用反斜杠转义特殊字符。 \.、\*、\+、\\d 等等。如果您不确定,您可以转义任何非字母字符,无论它是否特殊。请参阅the javadoc for java.util.regex.Pattern 了解更多信息。
【讨论】: