2010-08-13 2 views
1

Я пытаюсь получить регулярное выражение, которое может найти следующую часть в строке.Поиск правильного регулярного выражения php для этого сложного элемента

[TABLE|head,border|{ 
#TEXT|TEXT|TEXT# 
TEXT|TEXT|TEXT 
TEXT|TEXT|TEXT 
TEXT|TEXT|TEXT 
}] 

Его из простого самостоятельного редактора WYSIWYG, который дает возможность добавлять таблицы. Но «синтаксис» для таблицы должен быть таким же простым, как и выше.

Нет, так как может быть много этих определений таблиц, мне нужно найти все с preg_match_all php, чтобы заменить их на известный тег <table> в html.

Регулярное выражения IAM пытается использовать для следующего:

/\[TABLE\|(.*)\|\{(.*)\}\]/si 

В \x0A остается для перехода на новую строку, как мое приложение работает на Linux, этого достаточно (отлично работает с простым регулярным выражением).

Я использую онлайн-тестер регулярных выражений на functions-online.com.

Матчи, которые он получает, не очень полезны. И если у меня есть более одного определения TABLE, подобного выше, то совпадения совершенно бесполезны. Из-за (. *) Он охватывает все, начиная от «головы, границы» до самого последнего «|» символ во втором определении TABLE.

Я хотел бы получить список совпадений, дающих мне полную команду таблицы по одному.

+0

Я не могу играть с ним прямо сейчас, но если вы на Windows, вы должны попробовать http://www.weitz.de/regex-coach/ для работы с регулярным выражением. – Fanis

ответ

2

Это потому, что по умолчанию. * Будет жадным совпадением, если ваш код работает правильно для ввода, содержащего только одно значение. Размещение вопросительного знака после двух. * Должно предотвратить проблему жадности.

/\[TABLE\|(.*?)\|\{(.*?)\}\]/si 
+0

О, боже, это был только недостающий знак вопроса? Его работы. Потерянные часы из-за 2 символов. 8- | Большое спасибо Cags. – NovumCoder

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