Мне нужно регулярное выражение, которое будет соответствовать, blahfooblah
но неblahfoobarblah
Я хочу, чтобы он соответствовал только foo и всему, что находится вокруг foo, если за ним не следует bar.
Я пробовал использовать это: foo.*(?<!bar)
что довольно близко, но совпадает blahfoobarblah
. Негативный взгляд сзади должен соответствовать чему угодно, а не только планке.
Конкретный язык, который я использую, - это Clojure, который использует регулярные выражения Java под капотом.
РЕДАКТИРОВАТЬ: Более конкретно, мне тоже нужно пройти, blahfooblahfoobarblah
но нет blahfoobarblahblah
.
Ответы:
Пытаться:
Тесты:
Объяснение регулярного выражения
Другое регулярное выражение
Если вы хотите исключить
bar
только то, что сразу послеfoo
, вы можете использоватьредактировать
Вы обновили свой вопрос, чтобы сделать его конкретным.
Новые тесты
Новое объяснение
(?=.*foo(?!bar))
гарантирует, что afoo
найден, но не отслеживается напрямуюbar
источник
foo
но нетfoobar
. Чтобы соответствовать,bot
но неbotters
, вы должны использовать/(?=.*bot(?!ters))^(\w+)$/
.Чтобы сопоставить
foo
подписчиков с чем-то, с чего не начинаетсяbar
, попробуйтеВаша версия с отрицательным ретроспективным просмотром фактически означает «совпадение
foo
с чем-то, что не заканчивается наbar
». В.*
совпадает со всемиbarblah
, и(?<!bar)
смотрит наlah
и проверяет , что он не соответствуетbar
, который он не делает, так что весь шаблон матчей.источник
Вместо этого используйте негативный взгляд вперед:
Это сработало для меня, надеюсь, поможет. Удачи!
источник
Вы написали комментарий, в котором предлагалось, чтобы это соответствовало всем словам в строке, а не всей строке.
Вместо того, чтобы выкладывать все это в комментарии, я публикую его как новый ответ.
Новое регулярное выражение
Пример текста
Спички
источник
Ваш конкретный запрос на совпадение может быть сопоставлен:
Это будет совпадать,
blahfooblahfoobarblah
но нетblahfoobarblahblah
.Проблема с вашим регулярным выражением
foo.*(?<!bar)
- это.*
послеfoo
. Он соответствует как можно большему количеству любых символов, включая символы послеbar
.источник