2016-11-30 4 views
0

Я хочу, чтобы соответствовать командам какregex на Ocaml не соответствует одиночным буквам, номерам и пробелам?

a c x y 

где а букву «а», с какой-либо буквы (AZ, AZ), а х представляет собой целое число, а у представляет собой целое число (х и у предположим, что к координатам). а, с, х и у должны быть разделены одним пробелом

Так что я написал это регулярное выражение

string_match (regexp "a [a-zA-z] [0-9]+ [0,9]+") str 0 

Но когда я запускаю его в utop

utop # let str = "a c 7 12";; 
val str : string = "a c 7 12"              
utop # string_match (regexp "a [a-zA-z] [0-9]+ [0,9]+") str 0;; 
- : bool = false 

Я получаю ложь. ..

Я также попытался регулярное выражение, чтобы соответствовать a[ ][a-zA-z][ ][0-9]+[ ][0,9]+ пространства, но это также не работал

If any

ответ

3

y, ваше regex это: [0,9]. Я считаю, что это должно быть [0-9]. (Обратите внимание на «,» и «-»). [0,9] будет соответствовать символам 0, запятой и 9. В вашей спецификации указано, что y является целым числом, что указывает на то, что [0-9] - это то, что вы хотите.

Итак:

a [a-zA-z] [0-9]+ [0-9]+ 

должен работать.

Также рассмотрим «привязку» вашего регулярного выражения, начав его с символа ^, который соответствует началу ввода, и заканчивая его значением $, которое соответствует концу ввода.

Так что-то вроде этого:

^a [a-zA-z] [0-9]+ [0-9]+$ 
+0

так будет '^ а [A-Za-Z] [0-9] + [0-9] + $' 'гарантировать, что "ас 7 12 alkjdflajflkjalkfdja" 'не будет соответствовать? – 14wml

+0

правильный. Второе регулярное выражение, которое я предоставил, потерпит неудачу, если вход не завершится после «12» – mangotang

+0

спасибо! mucho оценил :) – 14wml

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