Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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_String - Fatal编程技术网

Java 在使用正则表达式时是否忽略字符串末尾的尾随空格?

Java 在使用正则表达式时是否忽略字符串末尾的尾随空格?,java,regex,string,Java,Regex,String,我在这里面临的问题是,我创建的当前正则表达式不能完全工作。如果字符串末尾没有空格,则会失败。我的问题是,有没有办法解决这个问题 问题详情如下: 我需要一个正则表达式,确保字符串符合以下格式 “LL=xxxxxx LL=xxxxxxxxx LL=xxxxxxx” L=字母。 X=字母、数字或标点符号 最接近的正则表达式是 ([\\pL]{2}=[\\pL|\\pN|\\pP]+ )+ 但此正则表达式不起作用,仅当字符串的格式为: “LL=xxxxxx LL=xxxxxxxxx LL=xxxxx

我在这里面临的问题是,我创建的当前正则表达式不能完全工作。如果字符串末尾没有空格,则会失败。我的问题是,有没有办法解决这个问题

问题详情如下:

我需要一个正则表达式,确保字符串符合以下格式

“LL=xxxxxx LL=xxxxxxxxx LL=xxxxxxx”
L=字母。 X=字母、数字或标点符号

最接近的正则表达式是

([\\pL]{2}=[\\pL|\\pN|\\pP]+ )+
但此正则表达式不起作用,仅当字符串的格式为:

“LL=xxxxxx LL=xxxxxxxxx LL=xxxxxxx ”
下面是我用来检查的代码:

    final String regex1 = "([\\pL]{2}=[\\pL|\\pN|\\pP]+ )+"; 
    String x = "xx=xxxxxx xx=xxxxxxxxxm xx=xxxxxxx xx=xxxxxxx"; // This is what I need!
    String y = "xx=xxxxxx xx=xxxxxxxxxm xx=xxxxxxx xx=xxxxxxx "; // This works, no good
    System.out.println(x.matches(regex1));
    System.out.println(y.matches(regex1));

将空格替换为
(?:|\z)
,它应该可以工作

([\\pL]{2}=[\\pL\\pN\\pP]+(?: |\\z))+
(?:|\z)
是一个与输入的空格或结尾匹配的非捕获组


请注意,在
[\\pL |\\pN |\\pP]
中,
并不表示“或”。您可能需要
[\\pL\\pN\\pP]
,它表示任何字母、数字或标点符号中的任何一个。

请注意,字符类中的
并不表示“或”将匹配文本
'.
。感谢您指出:)由于反斜杠的重复,您实际上已经搞错了。您应该在不使哑字符串加倍的情况下发布正则表达式,以便读取、打印和比较它们。你的意思是说
([\pL]{2}=[\pL\pN\pP]+(?:|\z))+
。然而,由于许多原因,这并不是一个很好的模式。为什么用括号括住
\pL
?这些都是多余的。另外,我看不到量化一个捕获组而不是简单的集群组有什么用处。你可能想要一些更像
(?x)^(?:\b\pL{2}=[\pL\pN\pP]+\p{Zs}*)+$
的东西,而添加
(?x)
以增加易读性和肘部空间。@tchrist,我想说我说的话。我对输入regexp做了必要的最小更改,以便操作员可以复制粘贴到他们的代码中∞pid Java预处理器将
\z
转换为
z
。但没有理由一开始就模仿一个愚蠢且基本上破碎的正则表达式。不要把不需要的东西放在括号里,重新思考你是如何完成的,因为你拥有的东西不起作用。@tchrist,Java预处理器,不管是什么,都不会把
\z
变成
z
。这是一个编译时错误。删除下一票。JPP就是我所说的将\uxxx转义转换为代码单元的东西。