Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式元字符(.)和普通点?_Java_Regex - Fatal编程技术网

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

Java正则表达式元字符(.)和普通点?,java,regex,Java,Regex,在Java正则表达式中,如何找出(点)元字符和我们在任何句子中使用的普通点之间的差异。如何处理其他元字符的这种情况,例如(*,+,\d,…)用反斜杠转义特殊字符\.,\*,\+,\\d,等等。如果不确定,则可以转义任何非字母字符,无论其是否特殊。有关详细信息,请参阅。如果希望正则表达式中具有特殊含义的点或其他字符为普通字符,则必须使用反斜杠对其进行转义。由于Java中的正则表达式是普通的Java字符串,因此需要对反斜杠本身进行转义,因此需要两个反斜杠,例如\\.Perl样式的正则表达式(Java

在Java正则表达式中,如何找出
(点)元字符和我们在任何句子中使用的普通点之间的差异。如何处理其他元字符的这种情况,例如(
*
+
\d
,…)

用反斜杠转义特殊字符<代码>\.,
\*
\+
\\d
,等等。如果不确定,则可以转义任何非字母字符,无论其是否特殊。有关详细信息,请参阅。

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

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

^$|*+?()[{\
在字符类之外有特殊意义

]^-\
在字符类中具有特殊意义(
[…]

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

不必要地转义其他字符可能会起作用,但某些正则表达式引擎会将其视为语法错误,例如,
\\
会在.NET中导致错误


还有一些会导致错误的结果,例如,
\我想匹配以“*”结尾的字符串
为此,我必须使用以下方法:

"^.*\\.\\*$"
如果你想一想,这有点傻:D 这是它的意思。在字符串的开头可以有任何字符零次或多次,后面跟一个点“.”,后面跟一个星号(*)


我希望这对某人有用。感谢Fabian的反斜杠。

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

但我发现:


要在java regexp中转义点,请编写
[.]

以下代码,您可以直接复制粘贴:

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”;
字符串[]imageNameArray=imageName.split(“\\”);
对于(int i=0;i

<强>如果错误在“之前”或“之后”存在空格,那么在这种情况下,最好还是考虑这些空间。>P/>

String imageName = "picture1  . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
    for(int i =0; i< imageNameArray.length ; i++)
    {
       system.out.println(imageNameArray[i]);
    }
String imageName=“picture1.jpg”;
字符串[]imageNameArray=imageName.split(“\\s*\\s*”);
对于(int i=0;i

这里,\s*是要考虑空格并只给你需要的分割字符串。

如果你想检查你的句子是否以“?”结尾,那么你必须在模式的末尾加[\\] $。< /p> < p>我在JGrasp做一些基本数组,发现用一个访问器方法来使用char [][]数组来使用('.')放置一个点。

不必要地转义非特殊字符在某些语言中可能有效,但在其他语言中可能会失败,因此最好不要养成这种习惯“反斜杠可以在非字母字符之前使用,无论该字符是否属于未转义构造的一部分。”此修复程序也适用于Bash。请注意,是否转义反斜杠取决于您提供正则表达式的方式。如果硬编码,则需要使用:“\\”,如果从原始源(例如文本文件)读取您只使用了一个反斜杠:\.相同,
\.
对我不起作用:
\.
抱怨说
不需要转义,
\.
让它认为它是
\.
而不是
\\.
然后生成器抛出了一个错误,
[.]
是唯一有效的东西。@mithunc这很奇怪,
\\\.
在字符串文本中为您提供了
\.
这就是正则表达式需要将点视为文本点而不是任何字符匹配器的地方。只需使用
“\\\\*$“
那么。如果字符串的开头对你来说无关紧要,那么就不需要匹配。是的,你是对的。老实说,我想不起这个:/n的用例是什么,它不是真的帮助你,而是帮助其他人看你的帖子:P