gpt4 book ai didi

java - 正则表达式 [A-Za-z !,?. _'@]+ returns 0 matches while [ !,?._' @]+ 返回 10?

转载 作者:行者123 更新时间:2023-12-02 01:45:17 25 4
gpt4 key购买 nike

String s = "He is a very very good boy, isn't he?";
Pattern pattern = Pattern.compile(("[A-Za-z !,?._'@]+"));
String[] split = pattern.split(s);
System.out.println(split.length);

问题 1:正则表达式 [A-Za-z !,?._'@]+ 返回 0 个子字符串,而 [ !,?._'@]+返回 10。请解释从模式中删除 A-Za-z 如何导致匹配?

问题 2:正则表达式 [ !,?._'@]+ 返回 10 个子字符串,而 [ !,?._'@] 返回 11。使用 + 和不使用 + 会提供不同的答案,请解释。我知道 + 匹配一个或多个。当我输出分割数组时,我看到带 + 号的正则表达式将“,”(男孩后面的逗号和空格)视为一种模式。但如果没有 + 号,它会将“,”视为 2 个独立的模式。这是否意味着 + 符号用于匹配正则表达式模式的一个或多个组合?

请解释以上2个问题。

最佳答案

我认为您误解了 split 的工作原理 - 它在字符串中查找与模式匹配的表达式,然后拆分它们周围的字符串,从而删除该过程中的模式。请参阅manual .

在第一个示例中,正则表达式 [A-Za-z !,?._'@]+ 匹配字符串中的每个字符,因此 split 不返回任何内容图案两边都没有字符。

在第二个示例中,正则表达式 [ !,?._'@]+ 返回 10 个子字符串,因为该模式在字符串中出现 9 次:(space)(空格)(空格)(空格)(空格) (空格),(空格)'(空格)(最后一个 不会生成子字符串,因为它后面没有字符)。输出子字符串为:Heisaveryvery男孩isnt

最后,在第三个示例 ([ !,?._'@]) 中,不同之处在于 ,(space) 在第二个示例(由于正则表达式上的 +)现在匹配为两个:(space)。这会在输出中产生一个额外的空子字符串。输出子字符串为:Heisavery非常男孩(空)isn

我创建了一个 demo on rextester它输出每个子字符串,以便您可以看到它的实际情况。

关于java - 正则表达式 [A-Za-z !,?. _'@]+ returns 0 matches while [ !,?._' @]+ 返回 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53754719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com