Регулярное выражение с одинаковыми словами - PullRequest
0 голосов
/ 04 января 2019

Предполагая, ДА , ИЛИ и ДА являются случайными словами (при условии, что 2 ДА совпадают) и здесь только для представления:

Я пытаюсь использовать регулярное выражение для сопоставления ДА , ИЛИ и ДА в любом месте, с условием, что строка должен совпадать только если он имеет 2 ДА .

Так что, если я попытаюсь использовать следующие тестовые строки:

yes or yes
no or yes
yes or no
maybe yes or yes
maybe yes or no
yes maybe or yes
maybe yes maybe yes maybe or

Оно должно соответствовать только следующему:

yes or yes
maybe yes or yes
yes maybe or yes
maybe yes maybe yes maybe or

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

^(?=.*(?=\w.*yes)(?=\w.*or)(?=\w.*yes)).*

К сожалению, мой запрос все еще соответствует no or yes. Вот моя ссылка на регулярное выражение: Нажмите здесь

Ответы [ 2 ]

0 голосов
/ 04 января 2019

A без регулярных выражений способ с использованием substr_count()

<?php
$string = 'yes or yes
no or yes
yes or no
maybe yes or yes
maybe yes or no
yes maybe or yes
maybe yes maybe yes maybe or';
$array =   explode("\n", $string);
$expected = [];
//print_r($array);
foreach($array as $line){
    $words = substr_count($line,'yes');
    if($words==2 && strpos($line, 'or') !== false ){
     $expected[]= $line;   
    }
}

echo implode("\n",$expected);

Выход:

yes or yes
maybe yes or yes
yes maybe or yes
maybe yes maybe yes maybe or

DEMO: https://3v4l.org/uL7fJ

0 голосов
/ 04 января 2019

Почему не так?

^(?=.*\byes\b.+\byes\b)(?=.*\bor\b).+

Первый Позитивный Lookahead находит два yes, а второй соответствует or

Демонстрация на regex101

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...