2

この文字列から次のデータを取得する方法を探しています

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

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

だから私はただ終わることができます $var3 = $var1 Vs $var2

問題は、対戦相手の名前に複数の単語を含めることができるということです。一方、vsの右側にある対戦相手の文の終わりまで進むことができますが、対戦相手の名前の先頭を区切る方法がありません。私は?

-の後の空白からチェックを行うにはどうすればよいですか?vsで停止し、文の終わりまで$ var2で再開しますか?

4

2 に答える 2

1

(.+?)の左側にある貪欲でないキャプチャグループは、 andスペース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];
于 2012-07-03T01:50:22.613 に答える
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.
于 2012-07-03T01:55:56.067 に答える