Регулярное выражение для проверки строки - PullRequest
1 голос
/ 29 сентября 2011

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

JOE ~ ПИТ ~ SAM ~ ЛПП

и следующие считаются действительными ...

JOE
~PETE
JOE~SAM~
~~~BOB
JOE~PETE~~

также, каждое из имен в пределах ~ может содержать не более 6 символов (или цифр), и может содержать не более 4 имен.

Регулярное выражение, которое я сейчас пытаюсь, это ...

[0-9a-Za-Z] {0,6} [~] {0,1} | [0-9a-Za-Z] {0,6} [~] {1} [0-9a -zA-Z] {0,4} [~] {0,1}

но мне интересно, является ли их лучшим решением.

ПРИМЕЧАНИЕ: я должен уточнить немного ... если разрешено только 4 имени, это означает, что максимально допустимо будет только 3 ~. Тильды обозначают позицию, поэтому, если ~~~ BOB произошел, это означало бы, что позиции 1, 2 и 3 были пусты, а 4-й был занят BOB. Также, если у вас был JOE ~~~, JOE находится на первой позиции, а остальные пусты. Ноль или более имен могут быть в любой из 4 позиций. Также допускаются такие символы, как., *, Пробел и другие.

Ответы [ 3 ]

1 голос
/ 29 сентября 2011

Как насчет этого?

^(~*\b[0-9a-zA-Z]{1,6}\b~*){0,4}$

Если предположить, что число ~ с, до и после имен не ограничено.

Экранирующая последовательность \bсоответствует "границам" между словами, то есть пробелу между любым буквенно-цифровым и любым не алфавитно-цифровым символом.

Кроме того, Pro Совет: escape-последовательность \w соответствует тому же, что и [0-9a-zA-Z].Вышеуказанное регулярное выражение может быть сокращено до:

^(~*\b\w{1,6}\b~*){0,4}$
1 голос
/ 30 сентября 2011

я думаю, что это то, что вы получаете

^[^~]{0,6}(~[^~]{0,6}){0,3}$
0 голосов
/ 29 сентября 2011

Допустимы ли пустые строки? Как насчет струн, состоящих исключительно из тильд? Если это так, будет работать следующее:

^([0-9a-zA-Z]{0,6}~?){0,4}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...