Что такое хороший разделитель для нескольких выражений Regex в одной строке? - PullRequest
1 голос
/ 12 ноября 2010

У меня есть конфигурация, в которой мне нужно хранить несколько выражений Regex в одной строке, чтобы я мог разбить строку на массив выражений, которые я могу обрабатывать по отдельности.Какой хороший разделитель я могу использовать для разбиения, которое не будет слишком сложным и в то же время не будет запутано с частями фактического выражения регулярного выражения?

Ответы [ 4 ]

3 голосов
/ 12 ноября 2010

вы можете взять
тег комментариев (? #COMMENTTEXT) с волшебным словом, чтобы разбить
или
, вы можете вставить волшебное слово что-то вроде BREAKHEREVOODOO
или
что-то непонятноепроизойти как два подчеркивания (__)

edit:
или вы можете поместить регулярные выражения в строку xml, которая содержит список CDATA-элементов: -)

2 голосов
/ 12 ноября 2010

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

$!^

например выглядит безопасно.

2 голосов
/ 12 ноября 2010

Общий разделитель есть /, но его можно изменить, если вы хотите использовать его в регулярном выражении.

Если вам действительно нужно использовать разделитель (я думаю, например, массив JSON будет лучшеальтернативно) вы могли бы ввести схему экранирования: если она стоит отдельно, она является разделителем, если ей предшествует определенный символ (например), она является частью регулярного выражения.

0 голосов
/ 12 ноября 2010

Если бы мне абсолютно необходимо было это сделать, я бы либо использовал идею хактика об использовании Regex-комментариев, либо я добавил бы к регулярным выражениям заголовок отсчетов.

Скажем, у меня было 3 регулярных выражения, я начинал бы данные с 5;10;20;;, который сообщал бы анализатору, что после ;; будет следовать регулярное выражение длиной 5 символов, после этого - 10 символов и так далее. Фактические детали спорны, но я надеюсь, что вы понимаете мою идею.

Последняя строка будет выглядеть примерно так: 5;10;20;;barns[a-zA-Z_]*?^Bonobo Monkey Hope$

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

Это не красиво, но это самая надежная идея, которую я могу придумать.

...