Php 如何匹配第一个连字符之前的文本

Php 如何匹配第一个连字符之前的文本,php,regex,Php,Regex,我有以下字符串: Citas de Esopo - Música - Belleza... Citas de Lem, Stanislaw - Tortura, sueño... 我需要从第一个中提取“Esopo”,从第二个中提取“Lem,Stanislaw”。对于第二种情况,我有以下regex wich非常有效: /Citas de (.*) \-(.*)\.\.\./ 但对于第一个案例,它返回“Esopo-Música”。如何编写正则表达式,使其与第一次出现“-”之前的文本匹配 我使用p

我有以下字符串:

Citas de Esopo - Música - Belleza...
Citas de Lem, Stanislaw - Tortura, sueño...
我需要从第一个中提取“Esopo”,从第二个中提取“Lem,Stanislaw”。对于第二种情况,我有以下regex wich非常有效:

/Citas de (.*) \-(.*)\.\.\./
但对于第一个案例,它返回“Esopo-Música”。如何编写正则表达式,使其与第一次出现“-”之前的文本匹配

我使用preg_match,然后使用匹配的第一个数组位置

 if( preg_match($pattern, $title, $result) > 0 )
 {
     $title = $result[1];
 }
您可以使用:

\bCitas de\h+([^-]+)\h+

代码:

if ( preg_match_all(/\bCitas de\h+([^-]+)\h+/, $input, $matches) )
   print_r($matches[1]);
只需将
(尽可能少)添加到您的解决方案中

/Citas de (.*?) \-(.*)\.\.\./

下面是一个例子。

Regex是贪婪的。你必须告诉它不能咀嚼的东西<代码>说它可以咀嚼任何东西。您希望
[^-]
告诉它,它只能咀嚼任何不是破折号/连字符的东西。