Регулярное выражение соответствует заданному слову вне кавычек

Мне нужно иметь возможность сопоставлять слово "internet" вне кавычек. например

Internet "InternetFormula works and it's internetformula"
Internet "The internet works"

Но я понятия не имею, как это сделать, потому что регулярные выражения сложны, и я не могу найти ничего подобного.


person Raúl Sanpedro    schedule 03.01.2015    source источник
comment
Достаточно похоже на Может ли регулярное выражение соответствовать всем словам вне кавычек? это, вероятно, обман, если ваш движок регулярных выражений совместим с Perl.   -  person Nathan Tuggy    schedule 03.01.2015


Ответы (2)


\bInternet\b(?=(?:[^"]*"[^"]*")*[^"]*$)

Вы можете попробовать это. См. Демо.

https://www.regex101.com/r/fG5pZ8/22

person vks    schedule 03.01.2015
comment
Обратите внимание, что этот метод работает до тех пор, пока у вас нет несопоставленной цитаты после найденного совпадения. В зависимости от многострочного параметра будут выбраны либо все случаи Internet независимо от кавычек, либо только случаи Internet в кавычках. Есть ли способ заставить его работать без этого ограничения? - person Ben; 19.10.2020
comment
@Ben ответ основан на предположении о сбалансированных кавычках .... :) - person vks; 19.10.2020
comment
Без проблем. Я просто хотел указать на это ограничение, так как мой похожий вопрос был перенаправлен на этот. У меня были проблемы, пока я не заметил ограничение. - person Ben; 19.10.2020

Согласно The Greatest Regex Trick Ever, вы можете просто использовать следующее:

"[^"]*"|\b(Internet)\b

ДЕМО

Все кредиты идут Nathan Tuggy за ссылку

person Enissay    schedule 03.01.2015
comment
Обратите внимание, что этот метод работает, если у вас есть код для обработки возвращенных совпадений и вы можете сосредоточиться только на группе 1. Он не работает (из моего тестирования), если вы хотите использовать замену (без дополнительной обработки), чтобы заменить найденное слово другим слово. - person Ben; 19.10.2020