正则表达式对比每一方的单词

时间:2012-07-03 01:45:12

标签: php regex

我正在寻找一种从此字符串中获取以下数据的方法

DON'T FLOP - ‬Rap Battle - Illmaculate Vs Tony D

DON'T FLOP - ‬Rap Battle - $var1 Vs $var2

所以我最终可以使用$var3 = $var1 Vs $var2

问题在于对手的名字可以包含多个单词,而我可以直到句子的结尾为vs的右边的对手,我没有办法划定对手的开头对手的名字,我呢?

如何在 - 之后从空白区域进行检查,在vs处停止并再次启动$ var2直到句子结束?

2 个答案:

答案 0 :(得分:1)

(.+?)左侧的非贪婪捕获群Vs,在-和空格后应抓取名字。只要你在-之后总是有空格,这应该可以正常工作。如有必要,\s+允许多个空格。

$pattern = '/Rap Battle -\s+(.+?)\s+Vs\s+(.+)$/';

$string = "DON'T FLOP - Rap Battle - Illmaculate Vs Tony D";
preg_match($pattern, $string, $matches);
var_dump($matches);

array(3) {
  [0]=>
  string(34) "Rap Battle - Illmaculate Vs Tony D"
  [1]=>
  string(11) "Illmaculate"
  [2]=>
  string(6) "Tony D"
}

$var1 = $matches[1];
$var2 = $matches[2];

答案 1 :(得分:0)

$text = "DON'T FLOP - Rap Battle - Illmaculate Vs Tony D";
$regex = '%Rap Battle - (.*?) Vs (.*)$%';
preg_match($regex, $text, $array);

$array[0] = entire string match.
$array[1] = first opponent.
$array[2] = 2nd opponent.