2011-01-21 2 views

ответ

2

Следующая PCRE должно работать, если вы не получили каких-либо вещь, отформатированный как " 1)»или тому подобное внутри секций:

\d+\)\s*(.*?)\s*(?=\d+\)|$) 

Объяснение:

  • \d+\) дает ряд а затем ).
  • \s* соответствует предыдущим пробелам.
  • (.*?) захватывает содержимое без жадности.
  • \s* соответствует конечным пробелам.
  • (?=\d+\)|$) гарантирует, что за совпадением следует либо начало нового раздела, либо конец текста.

Обратите внимание, что не навязывает, что они должны быть в восходящем или что-нибудь подобное, так что бы соответствовать следующий текст, а также:

4) Hello there 1) How are you? 5) Good. 
0

Я хотел бы предложить следующее (PCRE) :

(?:\d+\)\s*(.*?))*$ 
  • внутренняя часть \d+\)\s* совпадает с номером списка и закрывающей скобки, а затем дополнительным пробелом (ами).

  • (.*?) соответствует тексту списка, но не жадным способом (в противном случае он также соответствует следующему элементу списка).

  • Входящий (?: )*$ соответствует указанному выше нолю или более раз, до конца ввода.

+0

По моему опыту, большинство двигателей регулярных выражений не позволяют перехватить группы захвата, к сожалению. –

+0

Ну, тогда используйте '\ d + \) \ s * ((?:. (?! \ D \))) *)' и повторяйте, пока все не совпадёт. –

0

Вы должны иметь в виду текст после числа и кронштейн может быть любой текст, это будет найти свой подстроки:

\d\).+?(?=\d\)|$) 

EDIT:

Чтобы избавиться от пробелов и возвращать только текст без номера, получите группу 1 из следующего матча:

\d\)\w*(.+?)(?=\d\)|$) 

Чтобы получить номер в группе (1) и te xt в группе (2) используют это:

(\d)\)\w*(.+?)(?=\d\)|$) 
Смежные вопросы