Регулярное выражение в PHP для чисел между кавычками

Я нуждаюсь в том, чтобы извлечь с регулярным выражением только число внутри простых кавычек текста:

onclick="javascript:Cargar('502235593');">

Условия:

  1. Всегда появись как Cargar('502235593');">, и
  2. у числа всегда есть 9 цифр.


Результат должен быть array с 502235593.

Веб обладает многими числами, которые не служат, следовательно регулярное выражение, которое я пробую:

preg_match_all('/\d+/', $web, $match);

Он не служит, и я нуждаюсь в другой, которая была бы более ограничительной для этого случая в особенности.

4
задан 13.12.2017, 19:43
2 ответа

Регулярное выражение:

Лично, я забыл бы ;"> конец, у которого вероятно было бы больше случаев меняния. Это выражение совпадает с 9 цифрами внутри функции:

/Cargar\('(\d{9})'\)/


Описание:

  • Cargar\(' Совпади с буквальным текстом. Скобка должна убегать, потому что это метахарактер для regex.
  • (\d{9}) Это группа, которая захватывает все то, что совпадает с главным файлом, который находится между скобкой и это возвращает как независимая статья в array результатов. Совпади с:
    • \d{9} Точно девять цифр последующих. Если любит другое количество, возможно использовать \d{8,11} (между 8 и 11), \d{9,} (9 или больше), \d{0,} (0 или больше, то же самое что \d*), \d{1,} (1 или больше, то же самое что \d+), или любой квантификатор.
  • '\) Простые буквальные кавычки и скобка завершения конца.


Код:

$tiene_un_numero = preg_match( "/Cargar\('(\d{9})'\)/", $texto, $coincidencias);

if ($tiene_un_numero) {
    echo "Se encontró: " . $coincidencias[1];
}

Использовав скобку в регулярном выражении, группа определяет дополнительное задержание. Таким образом, $coincidencias[0] возврати весь текст, с которым он совпал, и $coincidencias[1] возврати 9 цифр.


Если ищется более одного результата, вместо preg_match (), мы используем preg_match_all ().

$texto = 'onclick="javascript:Cargar(\'502235593\'); Cargar(\'123456789\');">';

$cant = preg_match_all( "/Cargar\('(\d{9})'\)/", $texto, $coincidencias);

echo "Se encontraron " . $cant . " coincidencias.";
foreach ($coincidencias[1] as $valor) {
    echo "\nSe encontró: " . $valor;
}
Se encontraron 2 coincidencias.
Se encontró: 502235593
Se encontró: 123456789

В этом случае возврати двухмерный array. Снова, захвати то, что совпадает между скобкой, но $coincidencias[1] это array, который содержит все результаты, которые совпали с первой группой.

Страница, которая мне кажется очень практической, чтобы видеть, как остается array результатов, состоит phpliveregex.com, в том, что он помогает понимать / помнить в какой команде он возвращает каждую статью.


В конце концов, зная, что могло бы быть опциональное место в тексте раньше и после каждой скобки, мы могли бы использовать:

/Cargar\s*\(\s*'(\d{9})'\s*\)/


Рассуждения дополнительный:

Случай descripto был относительно простым. Однако, обработав HTML, регулярные выражения не удаются едва изменяется незначительно код, или даже они не позволили бы тебе отличать между текстом внутри onclick=, текста, который мог бы быть в любой другой стороне HTML. По этой причине, я не рекомендую никоим образом использовать regex, чтобы захватывать текст внутри HTML в любом случае, который был бы едва более сложным.

Взамен, он согласился бы на DOM (Документ Обхект Model). Существуют большие формы с PHP. Чтобы называть одну, возможно использовать класс DOMDocument. Видя примеры учебника PHP, он ощущается, что он очень прост и практически равен, как соглашаются с языка сценариев JavaScript.

1
ответ дан 24.11.2019, 12:54

Видеть Demo

preg_match_all("/^.*'([0-9]+)'.*$/", $web, $match);

Ver в regex101.com

2
ответ дан 24.11.2019, 12:54