2017-01-17 6 views
1

Я пытаюсь сопоставить любые алфавитные символы и "," или ";" и я пытаюсь использовать «<: L> Алфавитные символы» в соответствии с документацией https://docs.perl6.org/language/regexes. Однако компилятор жалуется. Каков правильный способ сделать это, не используя a..zA..Z? сообщениеPerl6: как использовать <alpha> в пользовательском классе символов или в диапазоне?

say "a,b,c;d,e;xyz" ~~ m/ <[ <alpha> \, \; ]>+ /; 

Ошибка:

Potential difficulties: 
    Repeated character (a) unexpectedly found in character class 
    at C:\Users\Guest\Documents/avg.pl:128 
    ------> ay "a,b,c;d,e;xyz" ~~ m/ <[ <alpha> \, \<HERE>; ]>+ /; 

Большое спасибо !!

ответ

2

Вы не можете использовать подправила как <alpha> внутри Enumerated Character Class (синтаксис <[ ... ]>). Примером правильного перечисляемого класса символов будет <[abc]>, чтобы соответствовать символам 'a', 'b' или 'c'. Вы написали перечислимый класс персонажей, который начался <[ <alpha> .... Это перечисляет символы '<', 'a', 'l', 'p', 'h', 'a' - и в этот момент компилятор жалуется, говоря «Неожиданно найденный символ символа (a) в классе символов».

Что такое правильный способ сделать это

Добавить соответствующий Unicode property (:L) для перечисляемого класса символов, содержащий , и ; как так:

say "a,b,c;d,e;xyz" ~~/<+ :L + [,;] >+ /; 

ДоП мы» Взаимоотношения между ними ближе всего подходят для объяснения этого (супер круче) рядом с битом, в котором говорится: «Можно написать <: Ll +: N>». Обратите внимание, что синтаксис является фиктивным относительно пробелов. (Если вы сделаете это неправильно это будет, как правило, не совпадают.)

+0

Могу ли я попросить вас, пожалуйста, добавить еще какой-нибудь контекст вокруг вашего ответа. Кодовые ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. – RBT

+0

Брэд, я отредактировал ваш ответ по запросу @ RBT, не оставляя вам времени, чтобы отредактировать его самостоятельно. Вы счастливы, что я сделал это, или вы бы предпочли, чтобы я дал вам день или что-то еще, чтобы сделать такие изменения самостоятельно? – raiph

+0

@raiph Если бы это имело для меня значение, я бы сделал это до публикации. –

0

Вы можете комбинировать с < альфа > тоже:

say "a,b,c;d,e;xyz" ~~ m/ <[,;] + alpha>+/

Как уже упоминалось в другом ответе, документация Enumerated character classes описывает объединение классов символов.

+0

Спасибо, mr_ron! Оно работает ! Моя первоначальная трудность заключалась в том, как использовать <[ ]> вместе с угловыми скобками . Благодарю. – lisprogtor

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