我正在经历一个场景,我必须通过jdbc语句创建表,并且我收到表名作为方法参数。使用了Oracle数据库,并且Oracle具有诸如表名之类的命名规则,不应以以下任何字符$#_
开头。我只想从开头而不是in_between或结尾替换所有那些特殊字符。例如:
#_PHYSICIANS
→PHYSICIANS
##_#_PHYSICIANS
→PHYSICIANS
##_#_PHYSICIANS_#_NAME
→PHYSICIANS_#_NAME
我应该使用什么正则表达式从一开始就替换这些字符?
答案 0 :(得分:4)
无论您想从一开始删除任何字符,都可以将它们放入字符集中并使用此正则表达式,
^[#_]+
并将其替换为空字符串。
这里^
标记字符串的开始,[#_]+
表示字符集中的一个或多个字符。
Java代码
List<String> list = Arrays.asList("#_PHYSICIANS","##_#_PHYSICIANS","##_#PHYSICIANS_#_NAME");
list.forEach(x -> System.out.println(x + " --> " + x.replaceAll("^[#_]+", "")));
打印
#_PHYSICIANS --> PHYSICIANS
##_#_PHYSICIANS --> PHYSICIANS
##_#PHYSICIANS_#_NAME --> PHYSICIANS_#_NAME
答案 1 :(得分:2)
答案 2 :(得分:1)
s = s.replaceFirst("^[#_$]+", "");
^
表示从头开始,[...]
列出字符,...+
一个或多个字符。
答案 3 :(得分:1)
这会删除任何字符之前的部分。
String text = "#_PHYSICIANS_#";
Pattern p = Pattern.compile("\\p{L}");
Matcher m = p.matcher(text);
if (m.find()) {
System.out.println(m.start());
String result = text.substring(m.start(), text.length());
System.out.println(result);
}