如何提取特定字符前带有 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;
分两步完成,
- 匹配
[^:]+(?=:)
- 在空白处展开结果。
全部完成!
我认为我不会将正则表达式用于此任务(除非您有特殊要求),因为有更快的单功能非正则表达式方法可用。
代码:(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'
假设我们有以下字符串:
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;
分两步完成,
- 匹配
[^:]+(?=:)
- 在空白处展开结果。
全部完成!
我认为我不会将正则表达式用于此任务(除非您有特殊要求),因为有更快的单功能非正则表达式方法可用。
代码:(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'