2009-04-05 1 views
0

Я пытаюсь работать, как извлечь заголовки POP3, используя это регулярное выражениеРегулярное выражение для извлечения заголовков POP3

^([A-Za-Z -] +?) ((=:?.) +) $

Delivered-To: [email protected]

группа возвращает символ ':' а, который я хочу избежать. Я пытаюсь разобраться, но не могу.

Нужна коллективная мудрость :-)

ответ

1

Я пошел бы с чем-то вроде

/^([^:]+):(.*)$/ 

Тогда вы бы

  • $ 1 - заголовок имя
  • $ 2 - значение
+0

Очень клевер и минимальный подход. Спасибо, что сработало. –

+0

Имейте в виду, что это очень распространенный трюк, который можно использовать для многих ситуаций. –

+0

Я сделал бы класс символов [^:] + притяжательным, чтобы предотвратить возможный ненужный откат: [^:] ++ – Geert

2

Как раз вы знаете, это не будет обрабатывать обернутые заголовки. Фактически, это регулярное выражение примет обернутый заголовок и добавит его в настоящий заголовок. Особенно, если обернутый заголовок не имеет «:» в следующих строках.

Опираясь на Regex Sergej Andrejev, этот один будет обрабатывать не захватывая завернутые строки:

^([^:\s+]+):(.*)$ 

Тем не менее, лучше всего сделать, это на самом деле читать строку заголовков построчно, и разобрать соответственно. Это боль (как я должен был сделать это для производственного кода), но это наиболее точно.

0

К сожалению, скопировал неправильный код:
^ (\ S +): \ s ((\ S \ S) *)
Он работает с несколькими линиями.

+0

Это регулярное выражение не собирается работать вообще. Его синтаксис недействителен для начала. – Geert

+0

Код ошибки: ^ (\ S +): \ s (([\ s \ S] (?!^(\ S +):)) *) Работает с несколькими строками. – 2009-07-07 21:10:38

Смежные вопросы