【发布时间】:2010-01-22 22:39:01
【问题描述】:
我知道使用正则表达式很容易匹配给定字符以外的任何内容。
$text = "ab ac ad";
$text =~ s/[^c]*//g; # Match anything, except c.
$text is now "c".
我不知道如何“排除”字符串而不是字符。我将如何“匹配任何东西,除了'ac'”?试过 [^(ac)] 和 [^"ac"] 没有成功。
有可能吗?
【问题讨论】:
-
对于简单的“字符串(不)包含在其他字符串中”,最好使用索引(如果不包含则返回 -1)。我写了一个邮件服务器日志文件解析器,它首先使用正则表达式进行那些简单的检查,在我切换到 index() 之后,与正则表达式版本相比,它的运行时间减少了大约 25%。作为奖励 index() 可能更容易阅读。
-
您的最终目标到底是什么? (1) 匹配不包含
ac(或其他一些子字符串)的字符串,或 (2) 替换字符串中除子字符串ac之外的所有内容(例如将abacadac更改为acac)?我怀疑是后者。 -
要添加到@Bart 的评论:请提供以下示例:(1)您要验证和无效的字符串或(2)您要从该字符串中提取的字符串或(3)替换的结果在这个字符串中。
-
我试图简化示例,但我的真正目标是清理一些 wiki 标记。基本上删除所有不包含“}}”的{{...}}。
-
一个简单的例子很好,但请确保不要过于简单化——你的例子应该仍然能代表你想要解决的问题。