在使用solr是,需要将特殊字符转义,在网上搜索,大多数结果为
static public function escape($value)
{
//list taken from http://lucene.apache.org/java/docs/queryparserSyntax.html#Escaping%20Special%20Characters
$pattern = '/(\+|-|&|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|;|~|\/)/';
$replace = '\\\$1';
return preg_replace($pattern,$replace,$value);
}
经过摸索,最终得到正确的结果:
Regex regex1 = new Regex("([+\\-&|!(){}\\[\\]^\"~*?:(\\)])");
var test = regex1.Replace(content,"\\$1");
对这个正则解释下:
([+\\-&|!(){}\\[\\]^\"~*?:(\\)])
1、 最外面是一个括号,意思是这里面的当成一个组。”组“的解释为:将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个 临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。链接为http://baike.baidu.com/link?url=oSRwAnr6GMDEp3T9_BicqhUUE218ISEzOmvGKND26UOtLKuEVLZlt3pw3qpDSu_zk3WGn_ypH8AHnggxm9H4da#7
2、大括号里面是中括号,表示匹配中括号中的任何一个字符
3、regex1.Replace(content,"\\$1"); $1表示正则中匹配到的字符, 具体含义在上面的链接中。
\\$1表示在正则中匹配的字符钱再加一个斜杠。此处两个斜杠中的前一个斜杠是转义。
regex1.Replace(content,"\\$1")表示在匹配字符钱加一个斜杠
原文链接:https://www.f2er.com/regex/360110.html