Я нуждаюсь в том, чтобы извлечь с регулярным выражением только число внутри простых кавычек текста:
onclick="javascript:Cargar('502235593');">
Условия:
Cargar('502235593');">
, и Результат должен быть array с 502235593
.
Веб обладает многими числами, которые не служат, следовательно регулярное выражение, которое я пробую:
preg_match_all('/\d+/', $web, $match);
Он не служит, и я нуждаюсь в другой, которая была бы более ограничительной для этого случая в особенности.
Регулярное выражение:
Лично, я забыл бы ;">
конец, у которого вероятно было бы больше случаев меняния. Это выражение совпадает с 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.