#regex #match #special-characters #regex-negation #oniguruma
#регулярное выражение #сопоставьте #специальные символы #регулярное выражение-отрицание #онигурума
Вопрос:
В настоящее время я использую регулярное выражение oniguruma для поиска функций, подобных совпадениям, за исключением некоторых ключевых слов. Например, в строке «это test() и im() testing() thi[s]() this_[is]_a_fun(с некоторыми параметрами)»
регулярное выражение должно соответствовать: test
, im
, testing
, thi[s]
this_[is]_a_fun
Текущее регулярное выражение, которое я использую, является
s*([A-z0-9w_] ).?(?=()(b(?<!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre))
но это не соответствует thi[s]
ни одной функции, содержащей скобки в слове.
Я попытался обновить регулярное выражение, чтобы сопоставить эти шаблоны с регулярным выражением
s*([A-z0-9w_|[|]] ).?(?=()(b(?<!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre))
но безрезультатно.
Буду признателен за любую помощь в сопоставлении таких шаблонов
Ответ №1:
Попробуйте это регулярное выражение:
([w []] )(?=([w ,]*))
ДЕМОНСТРАЦИЯ
Подробные сведения:
w
соответствует любому символу слова (равному [a-zA-Z0-9_]) один или несколько раз[
соответствует символу[
буквально]
соответствует символу]
буквально- Положительный прогноз
(?=([w ,]*))
буквально соответствует символам(
и любым символам из[w ,]
и символа)
. [w ,]*
соответствует любому символу слова (равному [a-zA-Z0-9_]) и,
нулю или более раз.
Комментарии:
1. @Bohemian
$
соответствует началу ввода или началу строки в многострочном режиме.2. @PedroRodrigues нет, наоборот:
$
соответствует концу ввода или концу строки в многострочном3. @Bohemian вы правы. Я имел в виду
^
. Тогда почему ваш первый вопрос?? И почему бы не исправить меня в вашем последнем, вместо того, чтобы просто указывать на ошибку?4. Это регулярное выражение работает для строк типа «test()», но не в том случае, если параметры указаны в круглых скобках, например «test (with,params)». И я изменил регулярное выражение на
s*([a-zA-Z[]_] ).*(?=()
, которое действительно работало, пока я не попытался исключить ключевые слова, используя это регулярноеs*([a-zA-Z[]_] ).*(?=()(b(?<!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre))
выражение, но это не зафиксировало [], я думаю, это связано с b, но idk5. @Custards1 обновил ответ, чтобы он соответствовал новой строке.