微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则转义

在使用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.jb51.cc/regex/360110.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐