Ruby расстался с регулярным выражением - регулярное выражение не делает то, что я хочу - PullRequest
3 голосов
/ 29 января 2010

у меня есть эта строка

string = "<p>para1</p><p>para2</p><p>para3</p>"

Я хочу разделить текст на para2, чтобы я получил это

["<p>para1</p>", "<p>para3</p>"]

Загвоздка в том, что иногда para2 может не заключаться в теги p (и могут быть дополнительные пробелы вне p и внутри него). Я думал, что это сделает это:

string.split(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/)

но я понял:

["<p>para1</p>", "<p>", "</p>", "<p>para3</p>"]

это не тянет начальный и конечный теги p в соответствующий шаблон - они должны быть удалены как часть разделения. Регулярные выражения Ruby по умолчанию жадные, поэтому я подумал, что они будут извлечены. И это, кажется, подтверждается, если я делаю gsub вместо разбиения:

string.gsub(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/, "XXX")
=> "<p>para1</p>XXX<p>para3</p>"

Они втягиваются и отсюда избавляются, но не на расколе. Любые идеи кто-нибудь?

спасибо, макс.

1 Ответ

8 голосов
/ 29 января 2010

Замените ваши группы захвата (…) на группы без захвата (?:…):

/\s*(?:<p>)?\s*para2\s*(?:<\/p>)?\s*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...