2015-12-10 5 views
1

У меня есть строкаRegular Expression, чтобы соответствовать строку после определенного слова до точки

Dažikliai. Nepavojingas. Savybės: Geltonas ekstrahuojamas iš kurkumos, neapalo šaknies. Arba gaunamas sintezės būdu. 

, и я хочу, чтобы соответствовать слово после статической строки Savybės. до первой точки.

Так что мой вывод должен быть:

Geltonas ekstrahuojamas iš kurkumos, neapalo šaknies 

Вот что я пытаюсь до сих пор

"/^Savybės=*$/" 

, но это не дает никаких результатов.

+0

Ваше текущее регулярное выражение пытается совместить с началом строки '^'. Но ваша строка не начинается с: 'Savybės'. – Progrock

ответ

2

Вы можете использовать положительный:

'назад

Regex101 example

(?<=Savybės:\s).*?(?=\.) 

Input:

Dažikliai. Nepavojingas. Savybės: Geltonas ekstrahuojamas iš kurkumos, neapalo šaknies. Arba gaunamas sintezės būdu.

Матчи:

Geltonas ekstrahuojamas İŞ kurkumos, neapalo šaknies


Если вы хотите включить . символ в конце:

Regex101 example

(?<=Savybės:\s).*?\. 

Вход:

Dažikliai. Nepavojingas. Savybės: Geltonas ekstrahuojamas iš kurkumos, neapalo šaknies. Arba gaunamas sintezės būdu.

Матчи:

Geltonas ekstrahuojamas İŞ kurkumos, neapalo šaknies.

2

Вам не нужно искать и искать ленивые точки, которые неэффективны.Вы можете просто использовать захват группу и отрицание класс символов, чтобы соответствовать любому символу, но точку:

$re = '/\bSavybės:\s*([^.]*)/u'; 
$str = "Dažikliai. Nepavojingas. Savybės: Geltonas ekstrahuojamas iš kurkumos, neapalo šaknies. Arba gaunamas sintezės būdu."; 
preg_match($re, $str, $matches); 
echo $matches[1]; 

См IDEONE demo (обратите внимание на модификатор /u тоже)

регулярных выражения спички:

  • \b - граница слова (так, чтобы не совпадать ни с одним словом, что содержит «Savybės»)
  • Savybės: - буква Savybės: последовательность символов
  • \s* - 0 или более пробельные
  • ([^.]*) - захват группы # 1, который будет содержать соответствие наше значение 0 или больше символов, кроме буквального .

Он принимает my regex 14 шагов, чтобы вернуть правильный матч , и требуется (?<=Savybės:\s).*?(?=\.) 179 шагов.

Смежные вопросы