【问题标题】:Regex: Match word containing special characters正则表达式:匹配包含特殊字符的单词
【发布时间】:2020-10-01 21:43:26
【问题描述】:

我目前正在使用 oniguruma 正则表达式来搜索功能类似的匹配项,但某些关键字除外。例如,在字符串中 "这是一个 test() 和 im() testing() thi[s]() this_[is]_a_fun(with,some,params)"

正则表达式应该匹配: test, im, testing, thi[s] this_[is]_a_fun 我正在使用的当前正则表达式是

\s*([A-z0-9\w_]+).?(?=\()(\b(?<!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre)) 

但这不匹配 thi[s] 或单词中包含括号的任何函数。

我尝试更新正则表达式以将这些模式与正则表达式匹配

\s*([A-z0-9\w_|\[|\]]+).?(?=\()(\b(?<!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre)) 

但无济于事。

任何匹配这些模式的帮助将不胜感激

【问题讨论】:

    标签: regex match special-characters regex-negation oniguruma


    【解决方案1】:

    试试这个正则表达式:

    ([\w+\[\]]+)(?=\([\w+,]*\))
    

    Demo
    详情:

    • \w+ 匹配任何单词字符(等于 [a-zA-Z0-9_])一次或多次
    • \[ 匹配字符 [ 字面意思
    • \] 匹配字符 ] 字面意思
    • + 匹配 1 次或多次
    • 正向预测 (?=\([\w+,]*\)) 匹配字符 ( 以及来自 [\w+,] 的任何字符和 字符 ) 字面意思。
    • [\w+,]* 匹配任何单词字符(等于 [a-zA-Z0-9_])和 , 零次或多次。

    【讨论】:

    • @Bohemian $ 匹配输入的开头,或多行模式下的行开头。
    • @PedroRodrigues 不,相反:$ 匹配输入的end,或多行中的end
    • @Bohemian 你是对的。我的意思是^。为什么你的第一个问题呢?为什么不在你的最后纠正我,而不是简单地指出错误?
    • 这个正则表达式适用于像“test()”这样的字符串,但如果参数在像“test(with,params)”这样的括号中,则不能。我将正则表达式更改为 \s*([a-zA-Z\[\]_]+).*(?=\() ,这确实有效,直到我尝试使用此正则表达式 \s*([a-zA-Z\[\]_]+).*(?=\()(\b(?&lt;!if|while|for|return|else|elif|equals|or|xor|and|not|le|gre)) 排除关键词但没有捕获 [],我认为这是由于 \b 但 idk
    • @Custards1 更新了答案以匹配新字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2016-12-08
    • 2021-11-03
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多