Просто чтобы избавиться от этого, я использовал бы index
, substr
или подобные, поскольку они являются очевидным решением для моего конкретного случая, но я делаю grammar
и поэтому могу использовать только regex
. :(
При этом совет по переводу регулярных выражений Perl5/PCRE в регулярные выражения Perl6 в любом случае является хорошим содержанием SO, потому что Perl 6 набирает популярность, а его механизм регулярных выражений сильно отличается.
Вот регулярное выражение, которое соответствует только строке, которая не содержит ни одного из заданного списка символов.
(попробуйте здесь.)
^(?:(?!\/).)*$
^ # assert position at start of string
(?: # begin a noncapturing group
(?! # negative lookahead: following regex must not match the string
\/ # literal forward slash
) # end negative lookahead
. # any character, once
)* # the previous noncapturing group, 0..Inf times
$ # assert position at end of string
Очевидно, не работает в Perl 6 по ряду причин.
По указанной выше причине я хотел бы использовать это в Perl 6. Вот то, во что я пытался перевести это, основываясь на CTRL-F ing документы по регулярным выражениям perl6 для non capturing
и negative lookahead
:
[ \/ <!before .*> \/ <!after .*> || .? ]*
И разбивка (думаю?):
[ # begin a noncapturing group which apparently look like a charclass in p6
\/ # a literal forward slash
<!before .*> # negative lookahead for the immediately preceding regex (literal /)
\/ # a literal /
<!after .*> # negative lookbehind for the immediately preceding regex
|| .? # force this to be a noncapturing group, not a charclass
]* # end noncapturing group and allow it to match 0..Inf times
Я реализую это как my regex not-in { ... }
, а затем использую как /^<not-in>$/
. Однако он возвращает Nil
для каждой строки, что означает, что он работает неправильно.
Мне не удалось найти эквивалент http://regex101.com для Perl 6, так что поэкспериментируйте с это не так просто, как было бы с Perl 5.
Как мне перевести это на Perl 6?
/^not-in$/
должно быть/^<not-in>$/
. - person CIAvash   schedule 28.01.2016Grammar::Tracer
иGrammar::Debugger
(оба доступны после установки Grammar::Debugger, если вы не они уже есть). Они очень помогли мне, когда я отлаживал свои грамматики. - person Christopher Bottoms   schedule 28.01.2016"a" !~ m{/}
в Perl 5 и"a" !~~ m{'/'}
в Perl 6. Хотя я могу представить несколько случаев, когда вам нужно знать, как написать что-то вроде вас.m{^ [^\/]* $}x
было бы лучше, хотя в этом конкретном случае. - person Brad Gilbert   schedule 28.01.2016index
илиsubstr
. - person cat   schedule 28.01.2016m{^ [^\/]* $}x
все равно будет лучше - person Brad Gilbert   schedule 28.01.2016"a" !~~ m{'/'}
в качестве ответа. @cat Если Брэд Гилберт добавит это в качестве ответа, это должен быть принятый ответ. - person Christopher Bottoms   schedule 29.01.2016