如何提取特定字符前带有 preg_match 的字符串中的所有单词

How to extract all words in a string with preg_match before a specific character

假设我们有以下字符串:

Terminator1 Terminator2 Terminator3: Terminator4

以及仅保存终结者 3 的给定正则表达式

(\w+)(?=:)

我必须如何将前 3 个终结符保存在字符串中,因为 php 的 preg_match 只提供将结果保存为数组?我正在考虑使用 implode() 作为粘合所有单词的唯一选项 ...

示例结果:

var_dump($terminators);
array(3) {
  [0]=>
  string(11) "Terminator1"
  [1]=>
  string(11) "Terminator2"
  [2]=>
  string(11) "Terminator3"
}

提前致谢

$string = "Terminator1 Terminator2 Terminator3: Terminator4";

$result = strtok($string, ":");

echo $result;

分两步完成,

  1. 匹配 [^:]+(?=:)
  2. 在空白处展开结果。

全部完成!

我认为我不会将正则表达式用于此任务(除非您有特殊要求),因为有更快的单功能非正则表达式方法可用。

代码:(Demo)

$input='Terminator1 Terminator2 Terminator3: Terminator4';
//$input='Terminator1 Terminator2 Terminator3 Terminator4'; // no delimiter

echo "strstr: ";
var_export(strstr($input,':',true));  // false when no delimiter is found
echo "\n\n";

echo "strtok: ";
var_export(strtok($input,':'));  // fullstring when no delimiter is found
echo "\n\n";

echo "explode: ";
var_export(explode(':',$input,2)[0]);  // fullstring when no delimiter is found
echo "\n\n";

echo "preg_replace: ";
var_export(preg_replace('/:.*/','',$input));  // fullstring when no delimiter is found
echo "\n\n";

echo "preg_match: ";
var_export(preg_match('/[^:]*/',$input,$out)?$out[0]:'error');  // fullstring when no delimiter is found
echo "\n\n";

echo "preg_split: ";
var_export(preg_split('/:.*/',$input)[0]);  // fullstring when no delimiter is found

输出:

strstr: 'Terminator1 Terminator2 Terminator3'

strtok: 'Terminator1 Terminator2 Terminator3'

explode: 'Terminator1 Terminator2 Terminator3'

preg_replace: 'Terminator1 Terminator2 Terminator3'

preg_match: 'Terminator1 Terminator2 Terminator3'

preg_split: 'Terminator1 Terminator2 Terminator3'