Perl Regural Expression |Как использовать отрицательный взгляд (?!) внутри группы без захвата (? :) - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу использовать негативный прогноз в не захватывающей группе в 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))*$)

Если вы проверите эти 2 выражения в https://regex101.com/, вы увидите это для строки "MySampleString"на CASE 2 у меня есть 2 Информация о матче.(Полный матч и матч группы 1).Теперь, если вы запустите первый шаблон ( CASE 1 ), вы увидите только полное совпадение с информацией о совпадении.

В моей попытке добавить групповое совпадение в CASE 1, заключив в скобки:

CASE 1 my try:   (^(?!(?:\w*(.)\1){3}).+$)

но теперь выражение внутри не работает: /

Я хочу найти способ, которым ^ (?! (?: \ W * (.) \ 1) {3}). + $ будет работать (с полным совпадением и совпадением группы 1).Я должен добавить эту опцию в очень длинное регулярное выражение, над которым я работаю, и оно не может работать как группа полного соответствия.Чтобы сделать его более понятным, я покажу вам пример того, что строка не должна иметь «пары символов» и в то же время не включать 4 повторения любой буквы.

        (?=^(?:(.)(?!\1))*$)(?=^(?:(.)(?!(?:.*?\1){4}))*$)

Эти 2 выражения (?= ^ (?: (.) ​​(?! \ 1)) $) и (? = ^ (?: (.) ​​(?! (?:. ? \ 1) {4}))* $) объединены, потому что оба имеют совпадение группировки.

1 Ответ

0 голосов
/ 20 апреля 2019

, если вы подразумеваете «объединить», это И

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

если вы имеете в виду под «объединить» ИЛИ

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