RegEx за не соответствующие позиции в цитате - PullRequest
1 голос
/ 13 октября 2009

Итак, я пытаюсь выяснить регулярное выражение и у меня возникли некоторые проблемы. Я хочу найти (сопоставить) все параметры SQL в большом файле сценария, но НЕ сопоставлять элементы в одинарных кавычках (например, адреса электронной почты). Например:

INSERT INTO [User]
(
   [UserGuid], [CompanyGuid], [Name], [EmailAddress]
) VALUES (
   @UserGuid1, @CompanyGuid, 'Jason', 'jason@jason.com'
)

С @UserGuid1 и @CompanyGuid соответствием, но без @jason соответствия. Я использую этот RegEx:

(@+[\w]+)

Но он совпадает с адресом электронной почты, поэтому я попытался сделать негативный взгляд вперед / назад так:

(?<!')[\W](@+[\w]+)[\W](?!')

но он соответствует '(' в следующем примере:

INSERT INTO [User] ([UserGuid]) VALUES (@UserGuid1)

У кого-нибудь есть идея, чего мне здесь не хватает? Что-то, что может сказать: «что-нибудь, что НЕ в наборе цитат?». Также можно предположить, что наборы сбалансированных котировок.

Ответы [ 3 ]

2 голосов
/ 13 октября 2009

Вы пробовали следующее?

(?<=\W)(@\w+)

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

следующее гарантирует, что в INSERT INTO [User] ([UserGuid]) VALUES ('@UserGuid1') ничего не найдено:

(?<![\w'])(@\w+)
1 голос
/ 13 октября 2009

Попробуйте это:

(?<=[^\w'])(@\w+)(?!')

Указывает, что каждому совпадению должен предшествовать не состоящий из слов символ (за исключением одинарных кавычек), затем иметь знак @ и слово, после которого не должно следовать ни одной одинарной кавычки.

1 голос
/ 13 октября 2009

(@ + [^ '] +) должно помочь. [^ ',] Будет соответствовать чему угодно, кроме одной кавычки, пробела или запятой. Возможно, вам придется добавить еще несколько символов, но это общая идея.

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