2013-06-20 5 views
1

Мне нужно использовать регулярные выражения для синтаксического анализа строки.Регулярные выражения VBScript с использованием выражения OR (|)

В большинстве случаев, строка может быть проанализирован с помощью выражения

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

Иногда строка должна включать в себя дополнительные 4-х символов, так что выражение будет

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

сами по себе либо выражение будет работать над их соответствующими строками. Первый также будет технически корректным для строки, предназначенной для второго выражения, однако раздел. {0,9} выражения будет отключен на 4 символа.

 
A quick explanation of the expression: 
Subset 1: 1 - 21 (or 25 characters) 
any characters a-z 
any characters A-Z 
the dash, the comma 
any digits 0-9 
the open and close parenthesis, the hash tag, forward slash, space and period. 

Subsets 2-7 
Any characters (up to 9 total) 

Я надеялся на что-то вроде выражения ниже

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21|25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

ИЛИ

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

я попробовал это, и они не работали. У кого-нибудь еще есть идеи?

ответ

1

Это довольно многословен, но я думаю, что вы должны сделать это:

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

Первая группа захвата должна быть 1-21 символов или 25 символов.

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

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9}){6} 
+0

Или разделить его в группе от 1 до 21 символ и необязательную группу из 4 символов: '^ ([a-zA-Z \ - \, 0-9 \ (\) \ # \/\.] {1,21} ([a-zA-Z \ - \, 0-9 \ (\) \ # \/\.] {4})?) (. {0,9}) {6} 'за счет наличия второй группы захвата с последними 4 символами, если применимо. – AutomatedChaos

+0

@AutomatedChaos Это будет соответствовать группам 22-24 символа; это эквивалентно '... {1,25}', который OP не работает. По правде говоря, я считаю, что реальная проблема в том, что шаблон просто плохо определен (как он должен знать, где разделить последние 0 - 54 символа на 6 групп?), Но без дополнительной информации это лучший ответ, который я могу дать. –

+0

Да, вы правы; первый может совпадать с 19 длинной строкой, а второй - с 4-мя длинными строками, что соответствует совпадению строки с длиной 23. Когда я вижу этот вопрос, это всплывает у меня в голове: не каждая проблема подходит для решения с регулярным выражением. – AutomatedChaos