Можно ли одним регулярным выражением выделить валидную строку в группу, в которых одновременно true оба выражения:
(!=арбуз|дыня)(?!краснодарский|астраханский).Пытался сконструировать кучу различных вариантов, но никак не выходило сделать чтобы оба выражения были в одном, работало только по отдельности.
Или это не возможно ?
Вдруг важно, данные в Regex будут попадать по строчке
Например:
арбуз сладкий // выделить
арбуз краснодарский
арбуз астраханский
дыня сладкая // выделить
дыня краснодарский
дыня астраханский
UPD: Ответ уже дали как достать верхнее - но могут быть данные и слитными
дынясладкая // выделить
арбузсладкий // выделить
Или это не возможно ?
Если я правильно понял суть - вполне возможно
~(?:арбуз|дыня)\h(?:(?!краснодарский|астраханский)\S+)~
Но справедливости ради должен заметить, что универсальных шаблонов не бывает. В контексте PHP (метка php не указана в вопросе, поэтому язык для реализации выберите согласно ваших предпочтений) можно конечно написать нечто подобное:
$str = 'арбуз сладкий // выделить
арбуз краснодарский
арбуз астраханский
дыня сладкая // выделить
дыня краснодарский
дыня астраханский';
$need = ['арбуз', 'дыня'];
$bad = ['краснодарский', 'астраханский'];
$need = join('|', $need);
$bad = join('|', $bad);
$arr = [];
! preg_match_all("~(?:$need)\h?(?:(?!$bad)\S+)~", $str, $arr) ?: $arr = $arr[0];
var_dump($arr);
Результатом будет массив:
array(2) {
[0]=> "арбуз сладкий"
[1]=> "дыня сладкая"
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости