我有这个正则表达式:
private static final String SPACE_PATH_REGEX ="[a-z|A-Z|0-9|\\/|\\-|\\_|\\+]+";
Run Code Online (Sandbox Code Playgroud)
我检查我的字符串是否匹配此正则表达式,如果不是,我想用"_"替换所有不在这里的字符.
我尝试过:
private static final String SPACE_PATH_REGEX_EXCLUDE =
"[~a-z|A-Z|0-9|\\/|\\-|\\_|\\+]+";
if (myCompanyName.matches(SPACE_PATH_REGEX)) {
myNewCompanySpaceName = myCompanyName;
} else{
myNewCompanySpaceName = myCompanyName.replaceAll(
SPACE_PATH_REGEX_EXCLUDE, "_");
}
Run Code Online (Sandbox Code Playgroud)
但是它不起作用......所以在第二个正则表达式"〜"似乎没有省略以下的字符.
任何的想法?
尝试:
final String SPACE_PATH_REGEX_EXCLUDE = "[^\\w~/\\-+]";
String out = in.replaceAll(SPACE_PATH_REGEX_EXCLUDE, "_");
Run Code Online (Sandbox Code Playgroud)
您遇到的主要问题是您|在模式中添加了不必要的内容.它们有不同的含义.此外,您可以通过使用来大大简化您的表达\w,这意味着"单词字符",意思是字母(大写或小写),数字或下划线并且是同义词[A-Za-z0-9_].
您还需要了解转义是如何工作的.有Java字符串转义,这就是你输入\\一个反斜杠到模式的原因.但也有正则表达式逃避.例如,\n是一个Java String换行符,它\\n是放入\n模式以查找换行符的序列.
您有两个方便的选项来转义一堆文本:
你可以用\Q...\E.之间的任何\Q和\E转义; 和
您可以使用Pattern.quote()引用任意字符串.
你需要在正则表达式中逃避某些序列的情境是上下文的.例如,-只有在被误认为是指示范围时才需要进行转义.[a-z]是一个小写字符.[a\-z]是一个a,-或z.但您可以-[a-z]指示连字符后跟小写字母.注意:您不需要转义第一个连字符.
| 归档时间: |
|
| 查看次数: |
4821 次 |
| 最近记录: |