当你允许用户(自己)任意指定搜索模式的时候,perl在正则表达式上的强项有时会反过来纠缠你。但是,quotemeta这个程序能够让你排除所有可能导致问题的字符。
Quotemeta程序会排除所有的非文字(non-word)字符(也就是说,所有除了a-z、A-Z、0-9和下划线之外的字符)。这就使得接受用户指定的搜索模式以及明确地寻找其内容变简单了。
例如,如果用户正在寻找一个电话号码,他可能输入“(801) 555-1212”,将它作为搜索字符串。如果你把这个字符串直接传递给perl正则表达式引擎,它就会把括号翻译成为分组操作数而不是文字字符来匹配。但是,如果你把这个字符串传递给quotemeta,它就会排除这个括号(以及空白和连字符)。这就变成了下面的字符串:“(801) 555-1212”,它正是正则表达式引擎所期望的。
当你想要使用正则表达式引擎搜索一个文字字符串的时候,你可以使用quotemeta来排除字符串里所有的非文字字符。这就能够防止它们被误认为是正则表达式的命令。
本文作者:James Brown是具有20年工作经验的行业开发专家,拥有多重工作背景,包括数字硬件设计,网络操作系统开发和分布式计算。