Регулярное выражение для поиска идентификатора задания в строке - PullRequest
0 голосов
/ 28 мая 2010

Пожалуйста, кто-нибудь может мне помочь, я буду всегда благодарен.

Я пытаюсь создать регулярное выражение, которое будет извлекать 797 из "Ваше задание 797 (" job_name ") отправлено"

или "Ваше задание 9212 (" another_job_name ") отправлено" и т. Д.

Есть идеи? Спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 28 мая 2010

Существуют ли какие-либо особые условия для получения номера?

Чтобы получить первый номер, просто используйте /\d+/ с preg_match.

if (preg_match('/\d+/', $subject, $match)) {
    $job_id = (int) $match[0];
}

В противном случае вы можете сделать что-то вроде следующего, которое ищет число, которому предшествует «задание» (без учета регистра).

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, но хорошо предлагать альтернативы.

2 голосов
/ 28 мая 2010

Если остальная часть строки гарантированно будет одинаковой, достаточно простого \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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...