if($title =~ s/(\s|^|,|\/|;|\|)$replace(\s|$|,|\/|;|\|)//ig)
Run Code Online (Sandbox Code Playgroud)
$ title可以是一系列的头衔,包括总裁,医学博士,首席运营官,首席执行官,......
$ replace可以是(股东),(所有者)等.
我一直收到这个错误.我检查了不正确的平衡'(',')',没有骰子:(
Unmatched ) in regex; marked by <-- HERE in m/(\s|^|,|/|;|\|)Owner) <-- HERE (\s|$|,|/|;|\|)/
Run Code Online (Sandbox Code Playgroud)
如果你能告诉我正则表达式的作用,那就太棒了.它会删除那些符号吗?多谢你们!
Pau*_*sey 15
如果变量$ replace可以包含正则表达式元字符,则应将其包装 \Q...\E
\Q$replace\E
Run Code Online (Sandbox Code Playgroud)
引用杰弗里弗里德的掌握正则表达式
文字文本跨度 序列\ Q "引号" 正则表达式元字符(即,在它们前面放置反斜杠)直到字符串结尾,或直到\ E序列.
如上所述,它将删除那些标点符号,然后是$ replace的内容,然后是更多的标点符号,并且它失败了,因为$ replace本身包含不匹配的括号.
然而,还有一些其他的一般正则表达式:首先,而不是将所有东西组合在一起(这只是为了简化逻辑和键入)我将它们放在一个字符类中.匹配[\s^,\/;\|]可能不易出错且手指友好.
其次,()除非你真的是指它,否则不要使用分组括号.这会将捕获的字符串放在捕获缓冲区中,并在正则表达式引擎中产生开销.每个perldoc perlre:
警告:一旦Perl发现你需要程序中任何地方的$&,$`或$',它必须为每个模式匹配提供它们.这可能会大大减慢您的计划.Perl使用相同的机制生成1美元,2美元等,因此您还需要为包含捕获括号的每个模式支付价格.资源
你可以通过添加?:到括号中来改变它来轻松解决这个问题:
(?:[\s^,\/;\|])
编辑:并不是说您需要在该实例中进行非捕获分组,但它已经在原始正则表达式中.
| 归档时间: |
|
| 查看次数: |
16652 次 |
| 最近记录: |