Регулярное выражение для соответствия одной или нескольким цифрам 1-9, одной '|', одной или нескольким '*' и нулю или нескольким ',' - PullRequest
2 голосов
/ 08 апреля 2011

Я новичок в регулярных выражениях, и мне нужно найти регулярное выражение, которое соответствует одной или нескольким цифрам [1-9] только ОДИН '|' знак, один или несколько знаков «*» и ноль или более знаков «,».

Строка не должна содержать никаких других символов. Вот что у меня есть:

if(this.ruleString.matches("^[1-9|*,]*$"))  
{  
    return true;  
}

Это правильно?
Спасибо,
Вини

Ответы [ 5 ]

4 голосов
/ 08 апреля 2011

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

Сначала проверьте, что у вас нет недопустимых символов - "^[0-9|*,]$"

Затем проверьте цифры "[1-9]", они должны совпадать хотя бы с одной.

Затем проверьте "\\|", "\\*" и "\\," и проверьте количество совпадений.

Если все тесты пройдены, значит, ваша строка верна.

4 голосов
/ 08 апреля 2011

Нет, попробуйте это:

"^[1-9]+\\|\\*+,*$" 
0 голосов
/ 08 апреля 2011

Похоже, что вам нужен шаблон

n-n, один или несколько раз, разделенных запятыми
затем бар (|)
затем n * n, один или несколько раз разделенных запятыми.

Вот регулярное выражение для этого.

([1-9]{1}[0-9]*\-[0-9]+){1}
(,[1-9]{1}[0-9]*\-[0-9]+)*
\|
([1-9]{1}[0-9]*\*[0-9]+){1}
(,[1-9]{1}[0-9]*\*[0-9]+)*

Но это так сложно и не учитывает детали, такие как для случая н-м, вы хотите п меньше чем м (Похоже). И вы, вероятно, захотите, чтобы перед тактом было одинаковое число n-m, а после бара x * y.

Зависит от того, хотите ли вы проверить синтаксис полностью или нет. (Я надеюсь, что вы действительно хотите.)

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

0 голосов
/ 08 апреля 2011

Пожалуйста, дайте нам по крайней мере 10 возможных подходящих строк того, что вы хотите принять, и 10 из того, что вы хотите отклонить, и скажите нам, нужно ли это из-за какой-то последовательности или его порядок не имеет значения. Таким образом, мы можем сделать надежное регулярное выражение.

К настоящему времени все, что я могу предложить, это:

^[1-9]+\|{1}\*+,*$

Этот RegEx был протестирован с этими образцами строк, принимая их:

56421|*****,,,  
2|*********,,,  
1|*  
7|*,  
18|****  
123456789|*  
12|********,,  
1516332|**,,,  
111111|*  
6|*****,,,,  

И это было проверено с этими образцами строк, отклоняя их:

10|*,  
2***525*|*****,,,  
123456,15,22*66*****4|,,,*167  
1|2*3,4,5,6*  
,*|173,  
|*,  
||12211  
12  
1|,*  
1233|54|***,,,,  

Я предполагаю, что ваш заказ строг, и все условия применяются одновременно.

0 голосов
/ 08 апреля 2011

это регулярное выражение должно работать

"^[1-9\\|\\*,-]*$"
  • Утверждение позиции в начале строки «^»
  • Соответствует одному символу, представленному в списке ниже «[1-9 \ | *, -] » От нуля до неограниченного количества раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «»
  • Символ в диапазоне от «1» до «9» «1-9»
  • А | персонаж «\ |»
  • A * символ «*»
  • Символ «,» «,»
  • Символ «-» «-»
Утверждение позиции в конце строки (или до разрыва строки в конце строки, если есть) «$»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...