Java 正则表达式也有特定的字母和至少一组字母中的一个
有人能帮我用regex语句找到使用此规则的语句吗 这个词需要有字母“J,U,G”(只是字母而不是顺序)和至少一个字母:G,L,E,R,S 所以我可以搜索一个列表来查找杂耍、变戏法、变戏法、变戏法等等Java 正则表达式也有特定的字母和至少一组字母中的一个,java,regex,search,letter,Java,Regex,Search,Letter,有人能帮我用regex语句找到使用此规则的语句吗 这个词需要有字母“J,U,G”(只是字母而不是顺序)和至少一个字母:G,L,E,R,S 所以我可以搜索一个列表来查找杂耍、变戏法、变戏法、变戏法等等 谢谢你问题的第一部分根本不适合正则表达式。该模式最终将成为一个令人费解的混乱局面,并且只会随着您添加更多必需的字符而变得更糟 然而,第二部分很琐碎: m/[glers]/i 因此,我建议分两部分实施解决方案。这取决于您的语言: C#(使用Linq) Perl(需要5.10) python 还有一个
谢谢你问题的第一部分根本不适合正则表达式。该模式最终将成为一个令人费解的混乱局面,并且只会随着您添加更多必需的字符而变得更糟 然而,第二部分很琐碎:
m/[glers]/i
因此,我建议分两部分实施解决方案。这取决于您的语言:
C#(使用Linq)
Perl(需要5.10)
python
还有一个正则表达式解决方案。但是你真的应该给出你正在使用的语言,因为正如@Quick-Joe-Smith所写的,对于你的任务可能还有其他更好的解决方案
^(?=.*J)(?=.*U)(?=.*G)(?=.*[LERS]).*$
再见
那些(?=)
是正面的,它们检查字符串中是否有字符,但它们不匹配。最后的*
将匹配您的完整字符串
您还需要修饰符
i
来启用ignorecase(不区分大小写)如果一次只处理一个单词,请尝试以下操作:
boolean isMatch = s.matches(
"(?i)^(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4");
如果要在较长的字符串中搜索匹配项:
Pattern p = Pattern.compile(
"(?i)\\b(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+\\b\\1\\2\\3\\4");
Matcher m = p.matcher(s);
while (m.find()) {
String foundString = m.group();
}
每当前四个备选方案中的一个匹配某个内容时,J()
、U()
、G()
或[GLERS]()
,它后面的空组就不会“捕获”任何内容(即空字符串)。当到达字符串的末尾时,每个反向引用-\1
、\2
,等等-,都会尝试匹配其相应组匹配的相同内容:再次为空
显然,这将永远成功;你总是可以匹配任何东西。诀窍在于,如果其对应的组没有参与匹配,则反向引用甚至不会尝试匹配。也就是说,如果目标字符串中没有j
,那么j()
备选方案中的()
就不会涉及。当正则表达式引擎稍后处理\1
反向引用时,它会立即报告失败,因为它知道该组尚未参与匹配
这样,空组就像一个复选框,反向引用确保所有复选框都已选中。不过有一条皱纹。G()
和[GLERS]()
备选方案都可以匹配G
;当你需要他们参加比赛时,你如何确保他们都参加?我试过的第一个正则表达式
"(?i)^(?:J()|U()|G()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4"
…未能匹配单词“jugg”,因为
G()
备选方案同时使用了G
<代码>[GLERS]()从未有机会参与。所以我添加了负前瞻-(?!*G)
,现在它只匹配最后一个G
。如果我有三个选项可以匹配g
,我必须将(?!*g.*g)
添加到第一个选项,将(?!*g)
添加到第二个选项。但实际上,在我达到这一点之前,我很可能已经切换到另一种方法(可能不涉及正则表达式) 但是您的示例中的lugger
没有所有的J
、U
和G
都没有意义。需要和至少一个有什么区别?为什么G同时出现在这两个位置?…你编辑的文章包括gurgle
,但也不包括J
、U
和G
。。。
boolean isMatch = s.matches(
"(?i)^(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4");
Pattern p = Pattern.compile(
"(?i)\\b(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+\\b\\1\\2\\3\\4");
Matcher m = p.matcher(s);
while (m.find()) {
String foundString = m.group();
}
"(?i)^(?:J()|U()|G()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4"