我想在 Perl Regex 的非捕获组中使用负前瞻。到目前为止,我已经创建了一个不允许 3 个“字符对”进入字符串的表达式
CASE 1: ^(?!(?:\w*(.)\1){3}).+$
For example the string: Mytte!3sttStrring | Not pass - 3 pairs | "tt","tt","rr"
如果您看到该组之前有一个否定的前瞻,我想将此表达式添加到一个组中。为了理解这一点,我将向您展示另一个仅不允许一对或字符的示例。
CASE 2 : no match if there is a pair in string: (?=^(?:(.)(?!\1))*$)
如果您在https://regex101.com/中测试这 2 个表达式,您将看到CASE 2上的字符串“MySampleString”我有 2 个匹配信息。(全场比赛和第 1 组比赛)。现在,如果您运行第一个模式(CASE 1),您将在匹配信息中仅看到完全匹配。
在我尝试在 CASE 1 中添加分组匹配选项时,将括号括起来:
CASE 1 my try: (^(?!(?:\w*(.)\1){3}).+$)
但现在里面的表达式不起作用:/
我想找到一种 ^(?!(?:\w*(.)\1){3}).+$ 可以工作的方法(使用完全匹配和 Group1 匹配)。我必须将此选项添加到我正在处理的很长的正则表达式中,它不能作为一个完整的匹配组工作。为了使其更简洁,我将向您展示一个示例,即字符串不能有“一对字符”,同时不能包含任何字母的 4 次重复。
(?=^(?:(.)(?!\1))*$)(?=^(?:(.)(?!(?:.*?\1){4}))*$)
这两个表达式 (?=^(?:(.)(?!\1)) $) 和 (?=^(?:(.)(?!(?:. ?\1){4}))* $) 合并,因为两者都有分组匹配。