package xmlchars;
import java.util.regex.Pattern;
public class TestRegex {
public static final String SPECIAL_CHARACTERS = "(?i)^[^a-z_]|[^a-z0-9-_.]";
public static void main(String[] args) {
// TODO Auto-generated method stub
String name = "#1998St #";
Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS);
System.out.println(pattern.matcher(name).replaceAll(""));//gives wrong output 1998St
}
}
基本上我想要实现的是
答案 0 :(得分:1)
你可以说:
... SPECIAL_CHARACTERS = "^[a-z_][a-z0-9_]+$";
并通过说:
来定义模式Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);
答案 1 :(得分:0)
我成功破解了正则表达式。简单改变现有的。
"^[^a-z_]*|[^a-z_0-9-._]"
答案 2 :(得分:0)
在这里,您可以使用工作证明。
package xmlchars;
import java.util.regex.Pattern;
public class TestRegex {
public static final String SPECIAL_CHARACTERS = "^[^a-z_]*|[^a-z_0-9-._]";
public static void main(String[] args) {
// TODO Auto-generated method stub
String name = " # !`~!@#$%^&*()-_=+{}[];:',<>/?19.- 98Cc#19 #/9_-8-.";
Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);
System.out.println(pattern.matcher(name).replaceAll("")); // output _19.-98Cc199_-8-.
}
}
答案 3 :(得分:0)
我假设您正在尝试识别String
中与该模式不匹配的任何内容。你看到的几乎是正确的。看起来你的正则表达式可能会像这样:
"(?i)^([^a-z_]|[^a-z0-9-_.])"
只有当这两个组中的一个出现在String
的开始时才会匹配。相反,试试这个:
"(?i)(^[^a-z_])|[^a-z0-9-_.]"
为了进一步缩短它,您可以使用与\\W
相同的predefined character class [^a-zA-Z_0-9]
。有了这个,你甚至不需要不区分大小写。
"(^\\W)|[\\W-.]"
如果String
被称为str
,str.replaceAll("(^\\W)|[\\W-.]","");
将删除所有无效字符。
测试你的字符串:
class RegexTest
{
public static void main (String[] args)
{
String str = "#1998St #";
str = str.replaceAll("(^\\W)|[\\W-.]","");
System.out.println(str);
}
}
输出:
1998St