Помогите с регекспом
((?=\d{3})(\d{3}))|((\d{3})(?<=\d{3}))
<?php
$a = "бла бла бла 001002003 004005006 бла бла";
preg_match_all('/(\d{3})/' ,$a, $matches);
var_dump($matches[0]);
?>
# php test.php
array(6) {
[0] =>
string(3) "001"
[1] =>
string(3) "002"
[2] =>
string(3) "003"
[3] =>
string(3) "004"
[4] =>
string(3) "005"
[5] =>
string(3) "006"
}
твой матч "не в курсе" к каким объединениям принадлежали эти тройки до разбития
по мне так "разбор полётов" регэкспа, работающего как описано в первом посте, будет сложнее, чем разбор двух простых последовательно работающих регэкспов
если твои регэкспы поддерживают look-ahead/behind, то можно так:тестирую тут http://www.regex101.com/
((?=\d{3})(\d{3}))|((\d{3})(?<=\d{3}))
твой пример не работает
твой матч "не в курсе" к каким объединениям принадлежали эти тройки до разбитияв данном случае это не важно, в тексте максимум одна такая строка
или я чего-то не понимаю?
там строка вида (\d{3})+ этих ddd может быть десяток
поясни, что ты в этом случае хочешь получить?
буковку g в модифайеры добавил?
десяток матчей на каждый \d\d\d
шайтан! спасибо, буду вникать.
шайтан!Эммм... Это ж очевидно было
(((?<=\d{3})\d{3})|(\d{3}(?=\d{3})))
велкам!
одиночные тройки что-то тоже матчити хорошо, одиночные тоже могут быть
оу, тогда стоп, тогда еще раз для тупых, чем просто (\d{3}) с модифайером g не подходит?
оу, тогда стоп, тогда еще раз для тупых, чем просто (\d{3}) с модифайером g не подходит?для задачи из первого поста подходит. Я насамом деле был не вкурсе про g поэтому слишком упростил наверно.
Дальше задача усложняется различными обрамлениями для искомых строк типа "x1(\d{3})+;" и прочего бреда который долго объяснять, вот там только твой шайтан-запрос поможет. Главная цель - вытащить тройки в матчгруппы, достигнута.
Оставить комментарий
nik93
мне нужно выцепить из текста последовательность видапотом разбить ее на тройки и каждую тройку как-то обработать.
Например из текста: "бла бла бла 001002003 бла бла" нужно вытащить "001002003" и обработать по отдельности "001" "002" и "003".
Мне казалось что эти тройки можно автоматом выцепить регекспом с помощью capturing groups, но максимум что я могу придумать это ((\d{3})+) который на строке выше дает только два матча 001002003 и 003.
Можно ли что-то еще сделать, или это невозможно в рамках регекспа?