sorry_i_noob
@sorry_i_noob

Почему не работает preg_match? Сама регулярка работает — проверял на онлайн сервисах для регулярок. Почему так?

Есть вот такой текст:
Текст
Недели через две после освобождения из пещеры Том отправился навестить Гека, который за это время набрался уже достаточно сил и мог вести какие угодно разговоры без вреда для здоровья. А у Тома было что порассказать Геку. Дом судьи Тэчера был по дороге, и мальчик зашел повидаться с Бекки. Судья и его знакомые втянули Тома в разговор, и кто-то в шутку спросил, не хочется ли ему еще раз побывать в пещере. Том ответил, что он не прочь хоть сейчас.
   — Я нисколько не сомневаюсь, Том, что и кроме тебя найдется немало охотников пробраться в пещеру, — сказал судья, — но мы приняли меры. В этом подземелье уже никто никогда не заблудится.
   — Почему?
   — Потому что я еще две недели назад распорядился обшить всю дверь листовым железом и запереть ее на три замка. А ключи у меня.
   Том побелел, как полотно.
   — Что с тобой, мальчик?.. Эй, кто-нибудь! Стакан воды!
   Принесли воду и прыснули Тому в лицо.
   — Ну вот, теперь все прошло. Что же это было с тобой, Том?
   — Ох, судья, там, в пещере, Индеец Джо!
  

  

   

    Глава тридцать третья
    ГИБЕЛЬ ИНДЕЙЦА ДЖО
   

   В пять минут новость разнеслась по всему городку, и тотчас же около десятка лодок, нагруженных людьми, направилось к пещере Мак-Дугала, а вскоре за ними последовал и пароходик, битком набитый пассажирами. Том Сойер сидел в одной лодке с судьей Тэчером.
   Как только открыли дверь, глазам прибывших представилось в смутном полумраке подземелья печальное зрелище. У самого входа лежал мертвый Индеец Джо, прижавшись лицом к дверной щели, как будто его тоскующий взор до последней минуты не мог оторваться от света и радости вольного мира. Том был взволнован, потому что по опыту знал, какие страдания должен был вытерпеть этот несчастный. В нем пробудилась жалость, но в то же время он испытывал огромное облегчение, так как с этой минуты почувствовал себя в безопасности; лишь теперь по-настоящему понял, каким тяжким бременем лежал у него на душе вечный страх с того дня, когда он обличил на суде этого свирепого убийцу.
   — А что это за оргии?
   — Не знаю… но у разбойников всегда бывают оргии — значит, и нам придется устраивать оргии. Ну, идем же, Гек, мы и то здесь засиделись слишком долго. По-моему, час теперь поздний, да и проголодался я сильно. В лодке мы поедим и покурим.
   Вскоре они вышли в заросли сумаха. Осторожно осмотревшись кругом, убедились, что на берегу никого нет, и вскоре уже сидели в своем ялике, уплетали еду и курили.
   Когда солнце стало склоняться к горизонту, они оттолкнулись от берега и пустились в обратный путь. Том работал веслами, держась поближе к берегу все время, пока длились вечерние сумерки, и весело болтал с Геком. Вскоре после наступления темноты ялик причалил к берегу.
   

   
   — Вот что, Гек, — сказал Том, — спрячем-ка деньги у вдовы Дуглас на чердаке ее дровяного сарая; утром я приду, мы их сосчитаем и поделим, а потом приищем для них безопасное местечко в лесу. Ты пока останься здесь и стереги, а я сбегаю за тележкой Бенни Тэйлора. Мигом вернусь.
   

   Он исчез и вскоре вернулся с тележкой. Мальчики положили в нее два мешка, прикрыли их старым тряпьем и стали взбираться на гору, таща за собой свой груз. Добрели до домика валлийца и остановились отдохнуть. Только собрались они двинуться дальше, как на пороге появился хозяин:
   — И отлично сделали, — сказала вдова. — Идите за мной, мальчики!
   Она привела их в спальню.
   — Вымойтесь и переоденьтесь, — сказала она. — Здесь два новых костюма, рубашки, носки — все, что требуется. Это, собственно, для Гека… Нет-нет, Гек, не благодари! Один куплен мистером Джонсом, другой купила я. Но они годятся вам обоим. Одевайтесь же, мы подождем. А как будете готовы, приходите вниз.
   И она ушла.
  

  

   

    Глава тридцать четвертая
    ЗОЛОТОЙ ПОТОК
   

   — Том, — сказал Гек, — можно удрать через это окно, если только найдется веревка. Окно невысоко от земли.
   — Вздор! Чего нам удирать?
   — Ну, знаешь, не привык я к такой компании. Это мне, ей-богу, не под силу. Не пойду я туда, Том!
   — Пустяки, ничего не значит. А вот я так ни капельки не волнуюсь. И тебя не дам в обиду, будь спокоен.
   Появился Сид.
   — Том, — сказал он, — тетя весь день поджидала тебя. Мери приготовила тебе воскресный костюм; все беспокоились, куда ты пропал… Слушай, а откуда у вас на штанах свечное сало и глина?
   — Мистер Сидди, советую вам не соваться в чужие дела… И что это они вздумали праздновать?
   — Просто у вдовы сегодня гости, она ведь часто устраивает у себя вечеринки. Сегодня — в честь валлийца и его сыновей за то, что они в ту ночь спасли ее от смерти. И, знаешь, я могу рассказать тебе еще кое-что, — если тебе интересно.
   — Ну?
   — Вот что: сегодня вечером старый мистер Джонс собирается всех удивить, но я подслушал его секрет, когда он говорил о нем тете, и думаю, что теперь это уж совсем не секрет. Все знают… вдова тоже… хоть и притворяется, будто не знает. Понятно, мистеру Джонсу надо было привести сюда Гека. Без Гека весь секрет провалился бы.

Это из книги Тома Сойера. Я хочу вытащить из этого текста главы. Вот они:
Глава тридцать третья
ГИБЕЛЬ ИНДЕЙЦА ДЖО

Глава тридцать четвертая
ЗОЛОТОЙ ПОТОК

Я решил сделать это через регулярку. Надо взять текст, который начинается с пяти переносов строк, в которых могут быть пробельные символы. Вот код:
$arr = [];
$res =  preg_match("/(\n\s*){5}.*\n.*/g", $text, $arr);

И потом у этого текста убрать переносы строк с пробельными символами.
Регулярка находит главы на веб сервисе для регулярок:
https://regex101.com/

Но вот в php $res = false, а $arr - пустой массив. Почему так?
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Регулярные выражения
Уберите модификатор g, он тут недоступен; вместо preg_match следует использовать preg_match_all.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@fsheden
а еще preg_match любит что бы первый параметр начинал и заканчивался на одинаковый символ, так:
preg_match('~ваша регулярка~', $text, $arr);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы