сопоставить строку за скобками - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть строка со словом to, как соответствовать слову to только тогда, когда оно выходит за скобки

(a turn; a task (a turn of work); to turn; Tongan cause Tongan turn)

to

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

?<!\()\bto\b(?![\w\s]*[\)])

1 Ответ

1 голос
/ 19 апреля 2019

Снаружи скобок означает сбалансированный текст.
Решение состоит в том, чтобы сопоставить сбалансированный текст в строке с текстом, который вы хотите найти наружу сбалансированный текст. Вы делаете это так:

Глобально найти:

(?s)(?:(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).)+?.*?(?=\1)[^(]*(?=\2$)|(?!to|[()]).)*?((?:(?!(?=\()(?:(?=.*?\((?!.*?\4)(.*\)(?!.*\5).*))(?=.*?\)(?!.*?\5)(.*)).)+?.*?(?=\4)[^(]*(?=\5$))(?!to|[()]).)*)(to)

Чтобы увидеть, что вы нашли, замените на

<$3$6>

Образец текста перед:

to (F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third))))))) hello to 
where is a to and this is also to
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
((123),(456),(789))
(a turn; a task (a turn of work); to turn; Tongan cause Tongan turn) (dsaf)
This is a you to as well as this to  here ( asdf )

Затем после замены:

<to>< hello to>< 
where is a to>< and this is also to><
This is a you to>< as well as this to>  here ( asdf )

Демо

регулярное выражение:

"(?s)(?:(?=\\()(?:(?=.*?\\((?!.*?\\1)(.*\\)(?!.*\\2).*))(?=.*?\\)(?!.*?\\2)(.*)).)+?.*?(?=\\1)[^(]*(?=\\2$)|(?!to|[()]).)*?((?:(?!(?=\\()(?:(?=.*?\\((?!.*?\\4)(.*\\)(?!.*\\5).*))(?=.*?\\)(?!.*?\\5)(.*)).)+?.*?(?=\\4)[^(]*(?=\\5$))(?!to|[()]).)*)(to)"

Regex читаемый код:

 (?s)
 (?:
      (?= \( )
      (?:
           (?=
                .*? \(
                (?! .*? \1 )
                (                             # (1 start)
                     .* \)
                     (?! .* \2 )
                     .* 
                )                             # (1 end)
           )
           (?=
                .*? \)
                (?! .*? \2 )
                ( .* )                        # (2)
           )
           . 
      )+?
      .*? 
      (?= \1 )
      [^(]* 
      (?= \2 $ )
   |  (?! to | [()] )
      . 
 )*?
 (                             # (3 start)
      (?:
           (?!
                (?= \( )
                (?:
                     (?=
                          .*? \(
                          (?! .*? \4 )
                          (                             # (4 start)
                               .* \)
                               (?! .* \5 )
                               .* 
                          )                             # (4 end)
                     )
                     (?=
                          .*? \)
                          (?! .*? \5 )
                          ( .* )                        # (5)
                     )
                     . 
                )+?
                .*? 
                (?= \4 )
                [^(]* 
                (?= \5 $ )
           )
           (?! to | [()] )
           . 
      )*
 )                             # (3 end)
 ( to )                        # (6)

Удачи!

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