【发布时间】:2023-03-14 03:55:01
【问题描述】:
我从 RegEx 开始,我需要帮助,我想验证是否有两个相等的字符后跟 A,或者它们是分开的(但保持不变)并且在中间 A。我举例说明:
BBA -> true
ABB -> true
BAB -> true
CCA -> true
ABC -> false
BAC -> false
BBBA -> false (there have to be only two)
ABBB -> false (there have to be only two)
目前我有类似的东西,但它不能正常工作:
(([B-Z])\1{2}A) | ([B-Z]{1}A[B-Z]{1}) | (A([B-Z])\1{2})
我知道我没有接近正确答案,我正在学习。如果有人能帮我一把,我将不胜感激。
【问题讨论】:
-
一般来说,您可能需要查看反向引用以及如何将它们与捕获组一起使用,以便您可以根据当前捕获的字符匹配一个字符:stackoverflow.com/questions/21428545/… 在您的情况下,问题是这样的
[A-Z]{2}将匹配AB、AZ和任何其他 2 符号正则表达式,除了A{2}A | B{2}A | C{2}A等或使用捕获之外,我没有看到表达“重复该集合中的相同字母”的好方法具有反向引用的组。 -
但是我会避免用正则表达式解决这种问题,它变得太复杂和脆弱。在正则表达式中提取2个首字母,然后检查它们在java中是否相同。
-
这个答案可能对您有所帮助:- stackoverflow.com/a/16717823/7560986