2011-12-22 4 views
0

Я пытаюсь совместить до первого появления], но не может заставить его работать, если кто-то может помочь мне понять это.regex: совпадение до первого символа найдено

Строка Я соответствие с:

[plugin:tabs][tab title="test"]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet nisl nisl. Ut interdum libero vitae quam ultricies et lacinia elit aliquet. Praesent tincidunt, sem tempus feugiat feugiat, turpis tellus scelerisque erat, sit amet feugiat neque arcu ac lectus. Sed at mi et elit interdum scelerisque vitae eu felis.[/tab][/plugin] 

Что она должна соответствовать:

[plugin:tabs] 

Что он держит соответствия:

[plugin:tabs][tab title="test"] 

Регулярное выражение:

(\[plugin:(?<identifier>[^\s]+)(?<parameters>.*?)\]) 

EDIT: Что он должен также соответствовать:

[plugin:tabs test="test"] 
+1

Возможно, использование символов '\ w' (слово символов) вместо' [^ \ s] '(символы без пробелов) уже достаточно. – Gumbo

+0

На каком языке вы используете? – JosephRuby

ответ

1

Попробуйте здесь

(\[plugin:(?<identifier>[^\]\s]+)(?<parameters>.*?)\]) 

Посмотреть here on Regexr

Это позволяет избежать дополнительно к пробельных символов также и ] символов в первой группе по имени.

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

(?:\[plugin:(?<identifier>[^\]\s]+)(?<parameters>.*?)\]) 

Чтобы избежать этого пространство между захватывается второй группы, просто соответствуют дополнительный пробел между двумя группами

(?:\[plugin:(?<identifier>[^\]\s]+)\s*(?<parameters>.*?)\]) 

Смотреть это here on Regexr

+0

Есть ли способ избавиться от пространства infront второй группы захвата? – luastoned

+0

@luastoned Я добавил регулярное выражение к моему ответу, просто сопоставив его между двумя группами. – stema

+0

Получил его, я попытался удалить первый '\ s' после' \] 'который не сработал, спасибо! – luastoned

2

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

(\[plugin:(?<identifier>[^\s]+?)(?<parameters>.*?)\]) 
          ^

Хотя (?<parameters>.*?) тогда часть не нужна.

Так что ваш окончательный Regex будет выглядеть следующим образом:

(\[plugin:(?<identifier>[^\s]+?)\]) 

€ ДИТ: См @ ответ STEMA в.

+0

Извините, забыл упомянуть, что параметры очень важны, см. Мой отредактированный вопрос – Christophe

+0

@krike Я не совсем понимаю, вы хотите совместить имя плагина и 'tab title =" test "' или что? – luastoned

+0

имя плагина с необязательными атрибутами, но не [tab title = "test"], который появляется после него – Christophe

0

с любым языком, который поддерживает lookbehinds что будет вашим самым простым решением.

/(^(?<!])*)/ 
Смежные вопросы