2016-07-30 3 views
0

Пример 1:Regex Match строку, если она существует

THE COMPANIES ACT 
(Cap 486) 
IT IS notified 

Пример 2:

THE COMPANIES ACT 
(Cap. 486) 
Incorporations 
IT IS notified 

Мой текущий регулярное выражение: THE COMPANIES ACT\n\(((?:Cap.|Cap) .*?)\)(?:\nIncorporations|\nincorporations)\nIT IS notified соответствует только Пример 2.

Я хотел бы, чтобы соответствовать как Примеры.

+1

Это потому, что требуется последняя часть в скобках, а не дополнительная. – usr2564301

ответ

3

Вы должны сделать (?:\nIncorporations|\nincorporations) необязательным, добавив ? (0 или 1 матч) после него. В противном случае первый пример не совпадает, как вы указали, в любом случае вы должны соответствовать (?:\nIncorporations|\nincorporations).

Как ncorporations распространен в обеих * ncorporations, вы могли бы рассмотреть (?:\n[Ii]ncorporations)? вместо (?:\nIncorporations|\nincorporations)? и (?:Cap\.?) вместо (?:Cap.|Cap), чтобы сократить его немного, а также, чтобы избежать точек (с . означает любой символ).

+0

Спасибо! Это сработало! –

+1

Кроме того, он может рассмотреть использование \ n ((I | i) ncorporations)? Поскольку это путь короче –

+0

@Raf Действительно! Еще один символ короче: '[Ii]' :) – nicael

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