请有人帮助我,我将永远感激。
我正在尝试创建一个正则表达式,它将从“你的工作797(”job_name“)中提取797”
或“您的作业9212(”another_job_name“)已提交”等。
有什么想法吗?谢谢你们!
答案 0 :(得分:2)
如果保证字符串的其余部分相同,那么简单的\d+
就足够了。
否则,请使用Your job (\d+)
并阅读第一个捕获的组。
preg_match("/Your job (\d+)/", $str, $matches);
echo $matches[1]; //prints the id.
修改:修改为获取职位名称
preg_match("/Your job (\d+) \("(.+?)"\)/", $str, $matches);
echo $matches[1]; //prints the id.
echo $matches[2]; //prints the job name.
答案 1 :(得分:2)
抓住这个号码有什么特殊条件吗?
要获取第一个号码,只需将/\d+/
与preg_match
一起使用。
if (preg_match('/\d+/', $subject, $match)) {
$job_id = (int) $match[0];
}
否则你可以执行以下操作,搜索“job”之前的数字(不区分大小写)。
if (preg_match('/job (\d+)/i', $subject, $match)) {
$job_id = (int) $match[1];
}
(这个正则表达式有更好的替代方案,但最好先保持简单。)
另一种选择是从正则表达式转向更基本的字符串解析:
sscanf($subject, 'Your Job %d ("%[^"]")', $job_id, $job_title);
// use $job_id and $job_title however you like
当然,可以使用preg_match
进行类似的操作,但提供替代方案也是一件好事。