正则表达式在字符串中查找作业ID

时间:2010-05-28 12:22:21

标签: php regex

请有人帮助我,我将永远感激。

我正在尝试创建一个正则表达式,它将从“你的工作797(”job_name“)中提取797”

或“您的作业9212(”another_job_name“)已提交”等。

有什么想法吗?谢谢你们!

2 个答案:

答案 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进行类似的操作,但提供替代方案也是一件好事。