假设我有以下输入:
Mission ... some Text ... to Planet 1
现在,模式(regEx)应该识别这个字符串:
/Mission.*Planet \d{1}/
因此,其中包含Mission
和Planet {any number}
的每个字符串都应该有效。
但是有可能通过号码获得星球吗?在这种情况下,它是Planet 1
的任务,是否可以从输入中获取字符串Planet 1
?
如果输入为Mission to Planet 3
,我需要字符串Planet 3
您不能简单地使用substr()
- 函数,因为Mission
和Planet {any number}
如果字符串包含Mission {any amount of text} Planet {any number}
,是否需要首先检查,然后再次检查Planet {any number}
preg_match($regEx, $input, $matches)
$input = "Mission blablabla to Planet 5";
$regex = "/Mission.*Planet \d{1}/";
if(preg_match($regex, $input)) {
$regexNew = "/Planet \d{1}/";
preg_match($regexNew, $input, $match));
}
那么$match
包含带有数字的行星?
或者有更优雅的方式吗?
答案 0 :(得分:1)
匹配和捕获可以使用单个preg_match()
:
Mission.*?(Planet \d)
上面的英文表达:匹配“Mission”后跟任何字符串,直到“Planet”(懒惰)并捕获后面的数字。如果行星的数量可能大于9,请使用\d+
代替\d
。
$input = "Mission blablabla to Planet 5";
$regex = "/Mission.*?(Planet \d)/";
if(preg_match($regex, $input, $match)) {
echo $match[1]; // => 'Planet 5'
}
答案 1 :(得分:1)
您可以使用捕获组:
preg_match('/Mission.*(Planet \d+)/', $input, $match);
然后使用:
$match[1];
这会给你Planet X
(其中X是数字)。