gpt4 book ai didi

java - 在java中为字符串写一个正则表达式

转载 作者:行者123 更新时间:2023-11-30 10:37:54 26 4
gpt4 key购买 nike

我正在尝试为字符串编写一个正则表达式。假设有一个字符串 RBY_YBR,其中 _ 代表空,因此我们可以递归替换字母和 _,结果为 RRBBYY_。可以形成两个或多个字母对,或者类似的东西 RRR 。

条件
1).左字母或右字母应相同。
2).如果没有 _ 那么字母表应该像 RRBBYY 而不是 RBRBYY 或 RBYRBY 等。
3).可以有多个下划线 _ 。
从正则表达式中,我试图通过用 _ 替换字符以形成连续字母的模式来查找给定字符串是否可以满足正则表达式
我写的正则表达式是

String regEx = "[A-ZA-Z_]";

但是这个正则表达式对于 RBRB 是失败的。因为没有空格来替换字符,而且 RBRB 也不在模式中。
我该如何编写有效的正则表达式来解决这个问题。

最佳答案

好的,据我了解,匹配字符串应或者仅由组合在一起的相同字符组成,或者必须至少包含一个下划线。

因此,RRRBBR 将无效,而 RRRRBB、RRRBBR_ 和 RRRBB_R_ 均有效。

问题创建者评论后,附加条件:每个字符必须出现 0 次或 2 次或更多次。

据我所知,这对于正则表达式是不可能的,因为正则表达式是没有“存储”的有限状态机。您必须“存储”在字符串中找到的每个字符,以检查它以后不会再次出现。

我建议使用一种非常简单的方法来验证此类字符串:

public static boolean matchesMyPattern(String s) {
boolean withUnderscore = s.contains("_");

int[] found = new int[26];

for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch != '_' && (ch < 'A' || ch > 'Z')) {
return false;
}

if (ch != '_' && i > 0 && s.charAt(i - 1) != ch && found[ch - 'A'] > 0
&& !withUnderscore) {
return false;
}
if (ch != '_') {
found[ch - 'A']++;
}
}

for (int i = 0; i < found.length; i++) {
if (found[i] == 1) {
return false;
}
}

return true;
}

关于java - 在java中为字符串写一个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978873/

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