2015-06-18 2 views
0

Я проверил мое регулярное выражение в http://www.regextester.com/AutoHotkey: RegExMatch() ряд цифр и букв

([0-9]{4,4})([A-Z]{2})([0-9]{1,3}) 

Это соответствие совершенного со следующими строками так же, как я хочу.

1234AB123 
2000AZ20 
1000XY753 

Но когда я пытаюсь его в AutoHotkey я получаю 0 результат

test := RegExMatch("2000SY155","([0-9]{4,4})([A-Z]{2})([0-9]{1,3})") 

MsgBox %test% 

тестирование на:

  • первых 4-х символов должно быть число
  • Следующие 2 символа должны быть заглавные буквы буквы
  • Следующие 1 - 3 символа должны быть номерами

ответ

1

Вы должны были много()

Это правильная реализация:

test := RegExMatch("1234AB123","[0-9]{4,4}([A-Z]{2})[0-9]{1,3}") 

Edit:

Так что я заметил, что вы хотите этот шаблон, чтобы соответствовать, но вы Арен» Это действительно очень много говорит.

Вот что я смог придумать, что соответствует тому, что вы просили, вероятно, это не самое лучшее решение, но это работает:

test := RegExMatch("1234AB567","^[0-9]{4,4}[A-Z]{2}(?![0-9]{4,})[0-9$]{1,3}") 

разбив его:

REGEXMATCH (Хейстек , NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])

Метасимвол (^) и знак доллара ($ ) называются якорями, потому что они не потребляют никаких символов; вместо этого они привязывают шаблон к началу или концу искомой строки.

^ может появиться в начале шаблона, чтобы совпадение происходило на самом начале строки. Например, ** ** соответствует abc123, но не 123abc.

$ может появиться в конце шаблона, чтобы совпадение происходило на самом конце строки. Например, abc $ соответствует 123abc, но не abc123.

Таким образом, добавляя Circumflex, мы требуем, чтобы наш шаблон [0-9]{4,4} был в начале нашего стога сена.

Посмотрите вперед и смотреть-за утверждений: групп (? = ...), (...?!) Являются называемые утверждения, потому что они требуют, чтобы условия быть выполнены, но не потреблять любые символы.

(?! ...) является негативным прогнозом, потому что он требует, чтобы указанный шаблон не существовал.

Наш следующий шаблон ищет два верхних альфа-символа [A-Z]{2}(?![0-9]{4,}), которые не имеют четырех или более цифровых символов после него.

И, наконец, наш последний шаблон, который должен соответствовать от одного до трех числовых символов, как последние символы в нашем Хейстекло [0-9$]{1,3}

+0

спасибо! Я являюсь regex virgin :) ... Кажется, что он отлично работает только с последним квантором {1,3}, кажется, что он игнорирует предел 3 чисел, если я добавляю к стоге сена 1234AB123456, это все равно выглядит как истина. Любая идея почему? –

+0

Я сам новичок. Я ответил на ваш вопрос, когда я выбегал за дверь, не намеренно игнорировал вас, и я только обратился к проблеме с синтаксисом AHK, который был придирчив к фигурным скобкам. Итак, теперь, когда я вернусь домой, я рассмотрю проблему с самим регулярным выражением, которое я объясню в приведенном выше правиле. (Надеюсь, вы нашли ответы сами, как вы просили несколько часов назад) – errorseven

0
test := RegExMatch("2000SY155","([0-9]{4,4})([A-Z]{2})([0-9]{1,3})") 
MsgBox %test% 

Но когда я пытаюсь его в AutoHotkey я получаю 0 результат

Поле сообщения правильно возвращает 1 для меня, то есть ваш начальный скрипт отлично работает с моей версией. Обычно, скобки не проблема в RegExes, вы можете положить туда столько, сколько хотите ... может быть, ваша версия AutoHotkey устарела?

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