我有一个字符串
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 :(得分:3)
你可以使用积极的外观:
(?<=Savybės:\s).*?(?=\.)
输入:
Dažikliai。 Nepavojingas。 Savybės:Geltonasekstrahuojamasiškurkumos,neapalošaknies。 Arbagaunamassintezėsbūdu。
匹配
Geltonasekstrahuojamasiškurkumos,neapalošaknies
如果你想在最后加入.
字符:
(?<=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个。