我有一个有效的正则表达式,它扫描一大块文本以查找在数据库中定义的关键字列表。我从数据库动态创建我的正则表达式来得到这个:
\b(?:keywords|from|database|with|esc\@ped|characters|\@ss|gr\@ss)\b
注意特殊字符被转义了。这适用于绝大多数情况,除非关键字的第一个字符是正则表达式特殊字符,如 @ 或 $。所以在上面的例子中,@ss 不会被匹配,但是 gr@ss 和 esc@ped 会。
有什么想法可以让这个正则表达式适用于这些特殊情况吗?我尝试过转义和不转义正则表达式字符串中的特殊字符,但无济于事。
提前致谢
大卫
请您参考如下方法:
new Regex(@"(?<=^|\W)(?:keywords|from|database|with|esc@ped|characters|@ss|gr@ss)(?=\W|$)")
将匹配。它检查要匹配的关键字前后是否有非单词字符(或字符串的开头/结尾)。我选择 \W 而不是 \s 因为标点符号和其他可能构成单词边界的非单词字符。
编辑:甚至更好(感谢 Alan Moore!- 两个版本将产生相同的结果):
new Regex(@"(?<!\w)(?:keywords|from|database|with|esc@ped|characters|@ss|gr@ss)(?!\w)")
两者都无法匹配 l@ss 中的 @ass,这可能正是您想要的。
