2015-12-17 4 views
2

, поэтому я был tring, чтобы выяснить функцию if в регулярном выражении, но, может попасть в нее.Regex условное заявление

Этих два сценария, которые могут произойти:

  • - [MyTag] Случайный текст, который может иметь 0-9 с частным случаем.
  • - Случайный текст, который может иметь 0-9 со специальным чехлом.

что моя картина должна делать:

IF (текст содержит "]") ТОГДА начать с "]" ELSE начинаются с "-"

Я попытался достичь этого с этим : (? (\]) (\]. * $) | (\ -. * $))

и, конечно, не удалось. Мы получили
(\] * $.), Которые Цанга части от "]" до конца строки не были достигнуты
(\ -. * $) Собирает от "-" до конца строки
(\ ]) Который должен выступать в качестве заявления IF

так может кто-нибудь объяснить мне, что не так, и как его исправить?

+2

Если вы хотите совместить остальную часть строки с дефисом или '' ', используйте' [- \]]. * '. –

ответ

1

Насколько я понимаю, вы хотите, чтобы соответствовать любой строке подстроку, начиная с -, который не имеет не смежное ] после нее на той же линии до конца, или после ].

Поскольку ] имеет приоритет, она должна быть первой альтернативой в группе:

(?:\]|-(?!.*]))(.*) 

См the demo, группа 1 проведет часть линии, которая не имеет - или ].

+1

Работал как шарм. спасибо – stackmonkey

1

Похоже, вы хотите, чтобы бит [MyTag] был дополнительным, а остальная часть шаблона - то же самое.

Таким образом, вы можете попробовать рисунок, который делает это:

\s*\-\s+(\[\w+\])?(\s.+)$ 

Где:

  • \s*\-\s+ является дефис в окружении пробельных
  • (\[\w+\])? необязательно тег в фигурных скобках
  • (\s.+)$ - это остальная часть до конца строки, включая ведущие одиночные пробелы