Как я могу получить в массив все вхождения этого шаблона 4321 [5-9] [7-9] {6}, но исключая, например, вхождения, где непосредственно перед значением стоит цифра, или сразу после него?
Например, 43217999999 должен быть действительным, но 1 43217999999 (обратите внимание на номер 1 в начале) не должен быть действительным.
Как первый пример, 43217999999 1 не должен быть действительным из-за 1 , который он имеет в конце.
Дополнительная трудность, по крайней мере для меня, заключается в том, что я должен анализировать это в любой позиции, в которой я могу найти его внутри строки.
Строка выглядит буквально так:
43217999997 / 5 43217999999 // 43217999998 _ 43217999999a43216999999-43216999999 arandomword 43215999999 7
Как вы могли заметить, у него нет стандартного способа разделения значений (я выделил жирным шрифтом значения, которые делали бы его недействительным, поэтому я не должен совпадать с ними)
Моя идея сейчас примерно такая:
(\D+|^)(4321[5-9][7-9]{6})(\D+|$)
(\ D + | ^) означает, что я ожидаю в этой позиции начала строки или хотя бы одного нецифрового числа и (\ D + | $) означает, что я ожидаю конца строки или хотя бы одного незначного -значное.
Это явно не соответствует тому, что я себе представляю.
Я тоже пытался сделать это в два шага, первый:
preg_match_all("/\D+4321[5-9][7-9]{6}\D+|4321[5-9][7-9]{6}\D+|4321[5-9][7-9]{6}$/", $input, $outputArray);
и затем:
for($cont = 0; $cont < count($outputArray); $cont++) {
preg_match("/4321[5-9][7-9]{6}/", $outputArray[0][$cont], $outputArray2[]);
}
чтобы я мог напечатать
<code>echo "<pre>" . print_r($outputArray2, true) . "
";
, но это не позволяет мне исключить те, у которых есть число до начала значения (например, 5 432157999999), а затем я не добиваюсь прогресса в своей идее.
Заранее спасибо за любую помощь.