Perl正则表达式|如何在非捕获组(?:)

时间:2019-04-19 12:34:56

标签: regex perl authentication qregularexpression

我想在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}))* $)之所以合并,是因为两者都有分组匹配项。

1 个答案:

答案 0 :(得分:0)

如果您用“组合”表示是AND

^(?!(\S)\1)(?!(\S)(?:\S*?\2){4})\S+ 

如果您用“组合”来表示是OR

^(?!(\S)\1|(\S)(?:\S*?\2){4})\S+