Как сопоставить регулярное выражение любой комбинации символов и некоторых символов, кроме двух тире подряд между "% и%" - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу найти следующую строку:

'% Wal-Mart's %'

Без соответствия

'% Wal--Mart's %' 

Или любая другая строка, которая содержит две черты между "% и%".

В настоящее время мое регулярное выражение выглядит так:

(?<='%)[ \w',&+-]*(?=%')

Но это позволяет пропустить строки с двумя штрихами.

Как сопоставить строки, содержащие некоторую комбинацию символов и символов (включая одну черту), не сопоставляя строки с двумя черточками в них?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

(?<='%)(?![ \w',&+-]*--)[ \w',&+-]*(?=%')

В Java

String regex = "(?<='%)(?![ \\w',&+-]*--)[ \\w',&+-]*(?=%')";

Regex demo

Это будет соответствовать

  • (?<='%) Положительный Lookahead , который будет утверждать, что предшествуетis %'
  • (?! Отрицательный прогноз, который утверждает, что следующее не
    • [ \w',&+-]*-- Соответствует любому символу из класса символов [ \w',&+-] с повторяющимся нолем илибольше раз сопровождается --
  • ) Закрыть отрицательный прогноз
  • [ \w',&+-]* Совпадение с символом из класса символов ноль или более раз
  • (?=%') Позитивный прогноз, подтверждающий следующее: %'

Java Demo

0 голосов
/ 06 сентября 2018

Вместо того, чтобы повторять набор символов, вы можете повторить группу , которая включает в себя сначала отрицательный взгляд на две черты, за которым следует исходный набор символов:

(?<='%)(?:(?!--)[ \w',&+-])*(?=%')

https://regex101.com/r/zDZJsy/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...