Regex 使用正则表达式提取子字符串

Regex 使用正则表达式提取子字符串,regex,Regex,我想从下面的字符串中提取“t=“和”&“之间的字符串,但是”&2384'有时可能不存在。我尝试了以下方法,但得到的结果不是“123455asdfgh&2384”,而是“123455asdfgh”,我在这里做错了什么?谢谢你的帮助 $string="t=123455asdfgh&2384"; $match=array(); preg_match('/t=(.*)(&.*)?/', $string, $match); echo $match[1]; 注意:我需要使用常规exp…

我想从下面的字符串中提取
“t=“
”&“
之间的字符串,但是
”&2384'
有时可能不存在。我尝试了以下方法,但得到的结果不是
“123455asdfgh&2384”
,而是
“123455asdfgh”
,我在这里做错了什么?谢谢你的帮助

$string="t=123455asdfgh&2384";
$match=array();

preg_match('/t=(.*)(&.*)?/', $string, $match);

echo $match[1];
注意:我需要使用常规exp…

试试这个

preg_match('/t=([^&]*)(&.*)?/', $string, $match);

尝试使用非贪婪量词:

preg_match('/t=(.*?)(?=&|$)/', $string, $match);

问题是第一个
*
匹配字符串末尾的所有内容,这仍然是完全匹配的,因为后一个组是可选的。

这更适合于,而不是正则表达式

parse_str( "t=123455asdfgh&2384", $params);
echo $params['t']; 
这:


这就是
parse_str
的作用(解析查询字符串):


使用查找字符串中的起始点和结束点,然后提取它怎么样?

不需要使用正则表达式。你想。@bingjie2680看看这个现场演示:它似乎完全按照你要求的方式工作。
123455asdfgh
$string="t=123455asdfgh&2384";
$args = array();
parse_str($string, $args);
echo $args['t']; // outputs '123455asdfgh'