Я пытаюсь создать регулярное выражение, которое соответствует шаблону в некоторой части строки, но не в другой части строки.Обеспечить несоответствие шаблона в пределах области
Я пытаюсь соответствовать подстроке, что
(я) окружен сбалансированной парой одного или несколько последовательных обратных кавычек `
(II) и не включает в себя стольких последовательной кавычки как в окружающие рисунки
(iii) где окружающие узоры (последовательность обратных выступов) не смежны с другими обратными окнами.
Это некоторый вариант синтаксиса обозначения встроенного кода в синтаксисе Markdown.
Примеры матчей заключаются в следующем:
"xxx`foo`yyy" # => matches "foo"
"xxx``foo`bar`baz``yyy" # => matches "foo`bar`baz"
"xxx```foo``bar``baz```yyy" # => matches "foo``bar``baz"
Одно регулярное выражение для достижения этой цели является:
/(?<!`)(?<backticks>`+)(?<inline>.+?)\k<backticks>(?!`)/
, который использует нежадным матч.
Мне было интересно, смогу ли я избавиться от не-жадного матча.
Идея исходит из того, что запрещенный шаблон является единственным символом. Когда я хочу, чтобы соответствовать подстроку, которая окружена одной цитатой '
, который не содержит апостроф в нем, я могу сделать что-либо:
/'.+?'/
/'[^']+'/
Первый использует не жадный матч, а второй использует явный шаблон несоответствия [^']
.
Мне интересно, возможно ли иметь что-то вроде второй формы, когда запрещенный шаблон не является одним символом.
Возвращаясь к первоначальному вопросу, есть отрицательный предпросмотр синтаксис (?!)
, но я не могу ограничить его эффективную сферу. Если бы я сделать мое регулярное выражение как это:
/(?<!`)(?<backticks>`+)(?<inline>(?!.*\k<backticks>).*)\k<backticks>(?!`)/
то эффект (?!.*\k<backticks>)
не будет ограничен в пределах (?<inline>...)
, но будет распространяться на всю строку. И поскольку это противоречит \k<backticks>
в конце, регулярное выражение не соответствует.
Существует ли регулярное выражение для обеспечения несогласованности шаблона (не обязательно одного символа) в пределах определенной области?
Это похоже на работу. Это красиво. – sawa
Не может быть упрощено до '' '/ (? '+) (? (?: (?! \ K ).) +) \ K (?!')/' ''? Будет ли это эквивалентно? Насколько мне показалось, мне кажется. –
sawa
Да, гораздо приятнее. –