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