Регулярное выражение просмотр вперёд

68
19 декабря 2021, 11:40

Можно ли одним регулярным выражением выделить валидную строку в группу, в которых одновременно true оба выражения:

  • чтобы такие подстроки были (!=арбуз|дыня)
  • а таких чтобы не было (?!краснодарский|астраханский).

Пытался сконструировать кучу различных вариантов, но никак не выходило сделать чтобы оба выражения были в одном, работало только по отдельности.

Или это не возможно ?

Вдруг важно, данные в Regex будут попадать по строчке

Например:

арбуз сладкий // выделить
арбуз краснодарский
арбуз астраханский
дыня сладкая // выделить
дыня краснодарский
дыня астраханский

UPD: Ответ уже дали как достать верхнее - но могут быть данные и слитными

дынясладкая // выделить
арбузсладкий // выделить
Answer 1

Или это не возможно ?

Если я правильно понял суть - вполне возможно

~(?:арбуз|дыня)\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]=> "дыня сладкая"
}
READ ALSO
Ввод двумерного массива в PHP

Ввод двумерного массива в PHP

мне нужно вводить данные с поля textarea в двумерный массивВот моя форма:

191
Как обновлять контент в реальном времени?

Как обновлять контент в реальном времени?

Как обновлять информацию на странице в реальном времениНапример есть страница которая выводит записи пользователей из базы данных, простая...

149
Как очистить весь текст от html

Как очистить весь текст от html

На сайте установлен плагин SCEditor и была включена функция копирования кода в месте с текстом, при вставки текста в поле То есть когда копируешь...

156
Выборка данных с двух разных таблиц SQL

Выборка данных с двух разных таблиц SQL

В общем, ломаю уже третий день голову над очередным вопросом: есть 2 таблицы, обе имеют разные столбцы и названия и типы данных, цель - вытащить...

247