【发布时间】:2013-01-12 08:05:28
【问题描述】:
这是我的正则表达式,我正在尝试搜索所有特殊字符,以便将它们转义。
(\(|\)|\[|\]|\{|\}|\?|\+|\\|\.|\$|\^|\*|\||\!|\&|\-|\@|\#|\%|\_|\"|\:|\<|\>|\/|\;|\'|\`|\~)
我的问题是,我不想只在顺序出现时转义一些特殊字符
喜欢这个(.*)
那么,让我们来看一个例子。
Sting message = "Hi, Mr.Xyz! Your account number is :- (1234567890) , (,*) &$@%#*(....))(((";
根据当前的正则表达式转义后,我得到的是,
Hi, Mr\.Xyz\! Your account number is \:\- \(1234567890\) , \(,\*\) \&\$\@\%\#\*\(\.\.\.\.\)\)\(\(\(
但是不想逃避这部分(.*)想保持原样。
我上面的正则表达式只用于搜索,所以我只是不想匹配这部分(.*),我的问题将得到解决
任何人都可以建议不逃避该部分字符串的正则表达式吗?
【问题讨论】:
-
字符串中没有我可以看到的部分。
-
你真的应该考虑使用
[character classes]而不是a|l|t|e|r|n|a|t|i|o|n -
序列
(.*)在您的正则表达式输入中不存在。 -
这个任务超出了正则表达式的能力。如果没有完整的问题规范,将很难为您提供帮助,即
(.*)是唯一不应该转义的序列。您似乎想要的是转义任意字符串中的特殊字符,同时检测嵌入在字符串中的正则表达式。该任务需要人工干预,因为没有规则可以消除所有可能的情况。 -
为什么要使用正则表达式,如果您可以简单地遍历字符串,逐个字符检查它是否在您的特殊字符列表中而下一个不在,那么它可能会很复杂?它可能也会运行得更快。正则表达式看起来很优雅,因为它们可以简洁地编写。但是,在后台,它们必须在运行时编译并执行。