2015-07-15 3 views
3

У меня есть этот текст:Матч между двумя строками + конкатенации

2015-10-01 15:15:30 subject: Announcement: [Word To Find] Some other thext 

Моя цель, чтобы соответствовать дате со временем:

(?s)(?<=^)(.+?)(?= subject\: Announcement\:) 

, а также текст в [ ]

(?s)(?<=\[)(.+?)(?=\]) 

Как получить эти два результата в одном регулярном выражении?

ответ

1

Используйте оператор регулярных выражений чера.

^(?s).*?(?= subject\: Announcement\:)|(?<=\[)[^\]]*(?=\]) 

DEMO

+0

Работает как очарование, большое спасибо. –

1

Вы можете использовать простое регулярное выражение для этого:

(.*)\s+subject.*\[(.*?)\] 

Или

(.*)\s+subject.*\[([^]]+)\] 

Первая группа содержит дату, второй содержит текст внутри [].

+0

Спасибо Марун, это соответствует также теме ... –

+0

@ Милош. Вы не захватываете его, так что не проблема. На каком языке вы используете? – Maroun

+0

Ты прав. Возможно, PHP. –

1

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

(?<=^|\[)(.*?)(?=subject|\]) 

см демо https://regex101.com/r/hU2iZ3/2

Обратите внимание, что все, что вам нужно использовать логическое ИЛИ (|) между вашими предшествуют токенов и последующих лексем.

Также обратите внимание, что если ваши есть еще скобки в пределах текста следует использовать отрицание класса символов вместо .*:

(?<=^|\[)([^[\]]*?)(?=subject|\]) 
+1

Работает как очарование, спасибо. –

+0

@ Милош Добро пожаловать! – Kasramvd

3

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

^(?s)(.*?) subject: Announcement: \[(.*?)] 

Что дает группу:

1. "2015-10-01 15:15:30" 
2. "Word To Find" 

См. live demo.

Увольнение:

  • не надо бежать ], кроме как внутри символьного класса
  • Он никогда не нужно, чтобы избежать двоеточие :
  • Взгляд за (?<=^) идентичен просто ^, т.к. оба являются утверждениями с нулевой шириной
+0

Да .. простой подход всегда хорош. – Maroun

+0

Не следует ли избегать ']'? Он должен соответствовать буквальному ']'. – Maroun

+0

@maroun no, ']' * is * literal ']'. Согласно моему ответу, единственный раз, когда вам нужно убежать, это когда в классе символов (очевидно, иначе вы бы закрыли класс символов), например, чтобы иметь класс со всеми скобками: '[() [\] {}] ' – Bohemian

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