Что не так в регулярном выражении? - PullRequest
0 голосов
/ 19 декабря 2018

Я не понимаю, почему это регулярное выражение работает не так, как я ожидаю:

регулярное выражение: ^<prefix>(.*?)(<optTag.*?>)?(.*?)<postfix>$

Тест: <prefix>some chars<optTag value>some chars<postfix>

Результат теста:

Группа 1: пусто

Группа 2: пусто

Группа 3: some chars<optTag value>some chars

Я ожидаю, что группа 2 = <optTag value>

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Вы можете добавить границы слов "\ b" в свое регулярное выражение, чтобы получить требуемое значение в группе 2.

Этот ReGeX работал для меня,

^<prefix>(.*?)(\b<optTag.*>\b)(.*?)<postfix>$

Вы можете прочитатьбольше здесь .

0 голосов
/ 19 декабря 2018

Вид боли, но вы могли бы поставить утверждение block в этих (.*?) группах.

^<prefix>((?:(?!<optTag.*?>).)*?)(<optTag.*?>)?((?:(?!<optTag.*?>).)*?)<postfix>$

https://regex101.com/r/6cQlkC/1

Расширенное

 ^ 
 <prefix>
 (                             # (1 start)
      (?:
           (?! <optTag .*? > )
           . 
      )*?
 )                             # (1 end)
 ( <optTag .*? > )?            # (2)
 (                             # (3 start)
      (?:
           (?! <optTag .*? > )
           . 
      )*?
 )                             # (3 end)
 <postfix>
 $
0 голосов
/ 19 декабря 2018

Нельзя использовать не жадные символы подстановки, предшествующие необязательной группе захвата.Используйте это вместо:

^<prefix>([^<]*)(<optTag.*?>)?(.*?)<postfix>$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...