请教perl编程中关于模式匹配变量中含有特殊字符时,该如何写正则表达式?

程序中的模式匹配行是:$name=~/\|\s+$query\s+\|/,其中$query是我的模式变量,在程序执行时,有一行没有匹配上,具体看了一下,是因为执行到该行时... 程序中的模式匹配行是:$name =~ /\|\s+$query\s+\|/,
其中$query是我的模式变量,在程序执行时,有一行没有匹配上,具体看了一下,是因为执行到该行时,$query = "Camponotus (Dendromyrmex) sp. HN-2002"
百思不得其解,求高人指点!
展开
 我来答
百度网友d44faec
2013-04-02 · TA获得超过640个赞
知道小有建树答主
回答量:699
采纳率:0%
帮助的人:223万
展开全部
你把$query替换进正则表达式里就看出为啥了。$query里有"(", ")", "."这些元字符,肯定就和你匹配的原意不一样了
追问
因为不是固定模式匹配,所以对于这种使用模式匹配变量的情形,怎么解决上面的问题呢?
追答
$query = quotemeta $query;
这个函数会将元字符转义,这样再用就不会出现你上面出现的那种错误了。
具体可以参见:http://www.douban.com/note/147350047/ (有点长的文章,可以在该网页用ctrl+F搜索quotemeta找到你想要的)
这个链接的网页上还提到一种方法,更适合你,$name =~ /\|\s+\Q$query\Q\s+\|/
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式