需求场景:
今天在处理SQL语句的时候,由于数据库中存的格式是VARCHAR2型的,这就需要对SQL语句中WHERE条件后边的带数字的字符串加上单引号,对于字符串的处理,首先想到的就是正则表达式,对正则表达式,虽然有一些了解,但是也谈上很熟练,百度了一番(正常网络也就那个几个无奈的搜索引擎使用啦),发现替换,基本上属于固定替换,就是把某一类符合正则标准的,全部替换为一个固定的字符串,比如说,错别字的处理啊,还是比较好用的,这个在程序中也有实现,很easy。但是,我需要的是多个,且是动态替换的,最基本的就是保留原来的匹配出来的串,然后再在首尾加上些东西。我大致搜索了一下,没发现一个满足我要求的。好吧,那就自己动手,丰衣足食吧。
解决方案:
简单说说我的思路,我是将字符串,进行了两次分割,一次匹配出满足正则表达式的串,一次匹配出不满足正则的串,这样他们总是相间的出现的,这样我就可以随意的操作匹配或者非匹配的串,然后再把他们何到一起。
1 package com.util.regex;
3 import java.util.Iterator;
4 import java.util.LinkedHashMap;
5 import java.util.Map;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
9 public class RegexUtil {
10 private String strSource="";
11 private String StrRe="";
13 public String getStrSource() {
14 return strSource;
15 }
16 public void setStrSource(String strSource) {
17 this.strSource = strSource;
18 }
19 public String getStrRe() {
20 return StrRe;
21 }
22 public void setStrRe(String strRe) {
23 StrRe = strRe;
24 }
25 public String flixedReplace(String rep){
26 return this.strSource.replaceAll(this.StrRe, rep);
27 }
28 /**
29 * <li>Description:</li>
30 * <li>Date:</li>
31 * <li>Modify:</li>
32 * <li>Version: 1.0</li>
33 * @author Administrator
34 * @param form
35 * @param last
36 * @return String
37 */
38 @SuppressWarnings("unchecked")
39 public String splitReplace(String form,String last){
40 String ss[]=this.getStrSource().split(this.getStrRe());
41 Pattern p = Pattern.compile(this.getStrRe());
42 Matcher m = p.matcher(this.getStrSource());
43 LinkedHashMap<Integer, String> map=new LinkedHashMap<Integer,String>();
44 int i=0;
45 while(m.find()){
46 map.put(i, form+m.group()+last);
47 i++;
48 }
49 Iterator<?> iter=map.entrySet().iterator();
50 StringBuffer tarStr=new StringBuffer();
51 for(int j=0;j<ss.length;j++){
52 if(!this.getStrSource().isEmpty()&&(!Character.isDigit(this.getStrSource().charAt(0))||j!=0)){
53 tarStr.append(ss[j]);
54 }
55 if(iter.hasNext()){
56 Map.Entry<Integer, String> entry=(Map.Entry<Integer, String>)iter.next();
57 if(entry.getKey()==j){
58 tarStr.append(entry.getValue());
59 }
60 }
61 }
62 return tarStr.toString();
63 }
65 public static void main(String[] args) {
66 RegexUtil re=new RegexUtil();
67 re.setStrSource(" 2132 3213 adsd 12321 asdfsa dsdf 12 1313adfaf231321dfafda1141dfaffafdf");
68 re.setStrRe("\\d+");
69 System.out.println(re.flixedReplace("hello"));
70 System.out.println(re.splitReplace("'", "'"));
71 // System.out.println(re.getStrSource().replaceAll("(\\w+)(\\d+)", "$1'$2"));
72 }
需求场景: 今天在处理SQL语句的时候,由于数据库中存的格式是VARCHAR2型的,这就需要对SQL语句中WHERE条件后边的带数字的字符串加上单引号,对于字符串的处理,首先想到的就是正则表达式,对正则表达式,虽然有一些了解,但是也谈上很熟练,百度了一番(正常网络也就那个几个无奈的搜索引擎使用啦),发现替换,基本上属于固定替换,就是把某一类符合正则标准的,全部替换为一个固定的字符串,比如...
public class Test {
public static void main(String[] args) {
String test="2020年2月13日".replaceAll("(?:年|月)", ".").replaceAll("(?:日)", "");
System.out.println(test);
2020.2.13
Map<String, String> data = new HashMap<>();
data.put("name", "zhangs");
data.put("code", "2222");
正则表达式,又称正规表示法、常规表示法(英语Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
折叠正则表达式应用实例
【1】正则表达式应用——替换指定内容到行尾
String str = "abc : def / ghi";
String regex = "[\\s:/]+"; // 匹配空格、冒号和斜杠
String result = str.replaceAll(regex, ""); // 去除匹配到的字符
System.out.println(result); // 输出:abcdefghi
在上述代码中,使用了正则表达式 `[\\s:/]+` 匹配空格、冒号和斜杠。其中 `\\s` 表示匹配任意空白字符,包括空格、制表符、换行符等;`/` 和 `:` 表示匹配这两个字符本身。`+` 表示匹配至少一个或多个字符。最后通过 `replaceAll` 方法将匹配到的字符替换为空字符串,即去除它们。