正则表达式匹配特定单词后的字符串直到点

时间:2015-12-10 17:18:11

标签: php regex

我有一个字符串

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=*$/"

但这并没有给出任何结果。

2 个答案:

答案 0 :(得分:3)

你可以使用积极的外观:

Regex101 example

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

输入:

  

Dažikliai。 Nepavojingas。 Savybės:Geltonasekstrahuojamasiškurkumos,neapalošaknies。 Arbagaunamassintezėsbūdu。

匹配

  

Geltonasekstrahuojamasiškurkumos,neapalošaknies

如果你想在最后加入.字符:

Regex101 example

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

输入:

  

Dažikliai。 Nepavojingas。 Savybės:Geltonasekstrahuojamasiškurkumos,neapalošaknies。 Arbagaunamassintezėsbūdu。

匹配

  

Geltonasekstrahuojamasiškurkumos,neapalošaknies。

答案 1 :(得分:2)

您不需要低效的lookbehind和lazy dot匹配。您可以使用捕获组和否定字符类来匹配除点之外的任何字符:

$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个。