Java 为什么添加空格会使我的正则表达式出错?
上述正则表达式与Java 为什么添加空格会使我的正则表达式出错?,java,regex,Java,Regex,上述正则表达式与Q1不匹配。QEQWEWQEQEQERQER 但是如果我在| (^\s*\d+\)(.*) | ) | (^\s*Q\d+\.\s*(.*)) 它和我的字符串匹配 空白是什么意思?它是否等于\s?它会影响我的可读性。正则表达式的内容100%适用于确定输入是否匹配。您的想象力不会改变正则表达式的处理 正则表达式“\dignore this part\d”与输入“12”不匹配,但与输入“1ignore this part2”匹配。不管在想象中“忽略此部分”将被跳过多少,它仍然是正则
Q1不匹配。QEQWEWQEQEQERQER
但是如果我在|
(^\s*\d+\)(.*) | ) | (^\s*Q\d+\.\s*(.*))
它和我的字符串匹配
空白是什么意思?它是否等于
\s
?它会影响我的可读性。正则表达式的内容100%适用于确定输入是否匹配。您的想象力不会改变正则表达式的处理
正则表达式“\dignore this part\d”与输入“12”不匹配,但与输入“1ignore this part2”匹配。不管在想象中“忽略此部分”将被跳过多少,它仍然是正则表达式的一部分
在您的情况下,额外的空格是“忽略此部分”的形式。正则表达式的内容100%适用于确定输入是否匹配。您的想象力不会改变正则表达式的处理 正则表达式“\dignore this part\d”与输入“12”不匹配,但与输入“1ignore this part2”匹配。不管在想象中“忽略此部分”将被跳过多少,它仍然是正则表达式的一部分
在您的例子中,额外的空格是“忽略此部分”的形式。在正则表达式模式中,空格是与空格匹配的有意义的原子。如果您需要使用空格、制表符和换行符格式化模式(使用正则表达式引擎不会考虑的空格),您可以使用
(?x)
修饰符或标志
然后,要使用(?x)
选项匹配这种模式中的文本空间,您需要转义空间来匹配文本空间。或者,您可以考虑将任何空白与“代码> > > >:匹配。
(^\s*\d+\)(.*) | )|(^\s*Q\d+\.\s*(.*))
请注意,如果添加
(?U)
修饰符、标志,\s
将匹配所有Unicode空白(如[\p{Zs}\t\r\n]
)。在正则表达式模式中,空格是匹配空格的有意义的原子。如果您需要使用空格、制表符和换行符格式化模式(使用正则表达式引擎不会考虑的空格),您可以使用(?x)
修饰符或标志
然后,要使用(?x)
选项匹配这种模式中的文本空间,您需要转义空间来匹配文本空间。或者,您可以考虑将任何空白与“代码> > > >:匹配。
(^\s*\d+\)(.*) | )|(^\s*Q\d+\.\s*(.*))
请注意,如果添加
(?U)
修饰符、标志,\s
将匹配所有Unicode空格(如[\p{Zs}\t\r\n]
)。是的,空格会影响正则表达式。不,它不等同于\s
\s
相当于字符类[\t\r\n\f]
——即匹配任何空白字符的字符类。因此,虽然您的格式空间包含在\s
中,但它们并不等同于它
正如评论中所说,文本空白在正则表达式中很重要。事实上,我相信这会导致您的第一个备选方案(子模式(^\s*\d+\)(.*)
)出现错误
如果我读对子模式的意图,它应该匹配表单的文本
\s A whitespace character: [ \t\n\x0B\f\r]
但它将:
(^\s*\d+\)(.*)
,将结束空间和交替处理在一起。此外,为了提高可读性,我们可以这样做:
2) some_text
它只在问题编号格式上交替,而不是整个模式
是的,空格会影响正则表达式。不,它不等同于
\s
\s
相当于字符类[\t\r\n\f]
——即匹配任何空白字符的字符类。因此,虽然您的格式空间包含在\s
中,但它们并不等同于它
正如评论中所说,文本空白在正则表达式中很重要。事实上,我相信这会导致您的第一个备选方案(子模式(^\s*\d+\)(.*)
)出现错误
如果我读对子模式的意图,它应该匹配表单的文本
\s A whitespace character: [ \t\n\x0B\f\r]
但它将:
(^\s*\d+\)(.*)
,将结束空间和交替处理在一起。此外,为了提高可读性,我们可以这样做:
2) some_text
它只在问题编号格式上交替,而不是整个模式
文本空白对于正则表达式是有意义的。如果需要将模式设置为“格式化”空白,请在模式前加上
(?x)
。@WiktorStribiżew谢谢。有意义吗?它是否等于\s
?不,\s
匹配的不仅仅是一个空格,如制表符、换行符、CR.@WiktorStribiżew请告诉我空格的含义。如果可能的话,添加一个答案。我接受。文字空白对于正则表达式是有意义的。如果需要将模式设置为“格式化”空白,请在模式前加上(?x)
。@WiktorStribiżew谢谢。有意义吗?它是否等于\s
?不,\s
匹配的不仅仅是一个空格,如制表符、换行符、CR.@WiktorStribiżew请告诉我空格的含义。如果可能的话,添加一个答案。我会接受的。太棒了。谢谢你的额外提示。谢谢你再给我来点酒谢谢:):)喝完了谢谢:):)