我想在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 上的字符串“ MySampleString”我有2个匹配信息。 (完全匹配和第1组匹配)。 现在,如果您运行第一个模式(案例1 ),您将在“比赛信息”中仅看到“完全比赛”。
在案例1中,我尝试添加分组匹配选项:
CASE 1 my try: (^(?!(?:\w*(.)\1){3}).+$)
但是现在里面的表达式不起作用:/
我想找到一种方法^(?!(?:\ w *(。)\ 1){3})。+ $可以工作(完全匹配和第1组匹配)。我必须将此选项添加到我正在处理的一个很长的正则表达式中,它不能作为完全匹配组使用。 为了使内容更简洁,我将向您展示一个示例,该字符串不得包含“一对字符”,并且同时不得包含任何字母的4个重复。
(?=^(?:(.)(?!\1))*$)(?=^(?:(.)(?!(?:.*?\1){4}))*$)
这2个表达式(?= ^(?:(。)(?!\ 1)) $)和(?= ^(?:(。)(?!(?:。 ?\ 1){4}))* $)之所以合并,是因为两者都有分组匹配项。
答案 0 :(得分:0)
如果您用“组合”表示是AND
^(?!(\S)\1)(?!(\S)(?:\S*?\2){4})\S+
如果您用“组合”来表示是OR
^(?!(\S)\1|(\S)(?:\S*?\2){4})\S+