Синтаксис регулярных выражений для Google Sheets - PullRequest
0 голосов
/ 15 января 2019

Ячейка А1 содержит:

I finally found the best dance partner!! #ad, check out the link in bio

Ячейка B1 содержит:

=REGEXMATCH(A1,"/#[aA][dD](?![A-z]|[0-9]|-|_|\/|\\)/")

По данным различных тестеров регулярных выражений , шаблон

#[aA][dD](?![A-z]|[0-9]|-|_|\/|\\)

допустимо и должно соответствовать строке в A1. REGEXMATCH должен вернуть TRUE, а не ошибку. Я также попробовал формулу без начальных и конечных слешей, но безрезультатно:

=REGEXMATCH(L2,"#[aA][dD](?![A-z]|[0-9]|-|_|\/|\\)")

Ошибка, которую я получаю в обоих случаях:

"Значение параметра 2 функции REGEXMATCH «# [aA] dD» не является действительной регулярной выражение ".

Я не знаю, что не так с моим синтаксисом регулярных выражений для Google Sheets, и я не могу найти какую-либо документацию Google или других пользователей в Интернете.

1 Ответ

0 голосов
/ 15 января 2019

Библиотека RE2 не поддерживает прогнозирование. Также не поддерживается литеральная нотация regex с разделителями, первая и последняя косая черта должны быть удалены, или они будут проанализированы как часть шаблона regex. [A-z] соответствует не просто буквам, вы должны написать его как [A-Za-z], чтобы соответствовать любой букве ASCII.

Вместо (?![A-z]|[0-9]|-|_|\/|\\) (что равно (?![A-Za-z0-9_/\\-])) используйте (?:$|[^a-z0-9_/\\-]):

=REGEXMATCH(A1,"(?i)#ad(?:$|[^a-z0-9_/\\-])")

(?i) - модификатор без учета регистра, не нужно писать [aA].

Детали

  • (?i) - режим нечувствителен к регистру
  • #ad - #ad подстрока
  • (?:$|[^a-z0-9_/\\-]) - либо конец строки ($), либо (|) любой символ, кроме буквенно-цифрового, _, /, \ или - символ.

enter image description here

...