gpt4 book ai didi

java - 编写正则表达式 java 的麻烦

转载 作者:行者123 更新时间:2023-11-29 06:51:53 24 4
gpt4 key购买 nike

String always consists of two distinct alternating characters. For example, if string 's two distinct characters are x and y, then t could be xyxyx or yxyxy but not xxyy or xyyx.

但是 a.matches() 总是返回 false 并且输出变为 0。帮助我理解这里出了什么问题。

public static int check(String a) {
char on = a.charAt(0);
char to = a.charAt(1);
if(on != to) {
if(a.matches("["+on+"("+to+""+on+")*]|["+to+"("+on+""+to+")*]")) {
return a.length();
}
}
return 0;
}

最佳答案

使用正则表达式 (.)(.)(?:\1\2)*\1?

  • (.) 匹配任意字符,将其捕获为第1组
  • (.) 匹配任意字符,将其捕获为第2组
  • \1 匹配第 1 组中捕获的相同字符
  • \2 匹配第 2 组中捕获的相同字符
  • (?:\1\2)* 匹配组 1+2 的 0 或更多
  • \1? 可选择匹配悬空组 1

输入的长度必须至少为两个字符。空字符串和单字符字符串将不匹配。

作为 java 代码,这将是:

if (a.matches("(.)(.)(?:\\1\\2)*\\1?")) {

参见 regex101.com工作示例1

1) 请注意,regex101 需要使用 ^$,它们由 matches() 方法隐含。它还需要使用标志 gm 来同时展示多个示例。


更新

作为pointed out by Austin Anderson :

fails on yyyyyyyyy or xxxxxx

为防止这种情况发生,我们可以添加一个零宽度负前瞻,以确保输入不会以两个相同的字符开头:

(?!(.)\1)(.)(.)(?:\2\3)*\2?

参见 regex101.com .

或者您可以使用 Austin Anderson's simpler version :

(.)(?!\1)(.)(?:\1\2)*\1?

关于java - 编写正则表达式 java 的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310731/

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