正则表达式和常用规则

常用的正则表达式规则:
 *  a:字符
 *  x 字符 x ,   举例:'a'表示字符a
 *  \\ 反斜线字符 ,    在正则表达式中,只有两个\\才能表达一个\
 *  \n 新行(换行)符 ('\u000A') 
 *  \r 回车符 ('\u000D') 
 *  b:字符类
 *  [abc] a、b 或 c(简单类) 
 *  [^abc] 任何字符,除了 a、b 或 c(否定) 
 *  [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)        表示所有的字母,不分大小写
 *      同理,[0-9] 表示所有的数字
 * 
 *  c:预定义字符类
 *  . 任何字符(与行结束符可能匹配也可能不匹配)   假如要表示的就是.字符本身,用\.表示
 *  \d 数字:[0-9]     实际操作中,因为\\表示\,所以要写成\\d表示数字0~9
 *  \w 单词字符:[a-zA-Z_0-9] 
 *  注意,在正则表达式里组成单词的东西必须有 a-z,A-Z,0-9组成
 * 
 *  d:边界匹配器
 *  ^ 行的开头 
 *  $ 行的结尾 
 *  \b 单词边界      举例: hello world?123    字母'o'和'w'之间的空格、'?'是边界
 *  e:Greedy 数量词
 *  X? X,一次或一次也没有 
 *  X* X,零次或多次 
 *  X+ X,一次或多次 
 *  X{n} X,恰好 n 次 
 *  X{n,} X,至少 n 次 
 *  X{n,m} X,至少 n 次,但是不超过 m 次 
 *  注意:如果在一个规则后面没有给定次数,那么默认是一次
 * 
 *  正则表达式的应用:
 *  a:判断功能
 *  String的public boolean matches(String regex)
 *  b:分割功能
 *  String的public String[] split(String regex)
 *  根据给定正则表达式的匹配拆分此字符串
 *  c:替换功能
 *  String的public String replaceAll(String regex, String replacement)
 *  使用给定的replacement替换字符串中所有匹配给定的正则表达式的子字符串
 *  d:获取功能
 *  Pattern和Matcher类的使用

 *  模式和匹配器的使用。

 *    a:判断功能举例:

 *     需求:判断手机号码是否满足要求

                Scanner sc = new Scanner(System.in);

                System.out.println("请输入你的手机号:");

                String phoneNumber = sc.nextLine();

                String regex = "1[3578]\\d{9}";

                System.out.println("你的手机号:" + phoneNumber.matches(regex));

 *     b:分割功能举例:
 *  需求: 有一个字符串"91 27 46 38 50",请写代码实现最终的输出结果

 *    "27 38 46 50 91"

String str = "91 27 46 38 50";
//对字符串进行分割,得到一个字符数组
String[] strArray = str.split(" ");
//把String[]转为int[]
int[] intArray = new int[strArray.length];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
//对int[]排序
Arrays.sort(intArray);
//将排序后的字符拼接成字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < intArray.length; i++) {
sb.append(intArray[i]).append(" ");
}
//转为字符串,去尾部空格

String result = sb.toString().trim();

 *     c:替换功能举例:

 *  需求:有一个字符串"Hello1234566World6227002511086653java"把其中非字母用'*'代替

//定义一个字符串
String str = "Hello1234566World6227002511086653java";
//定义一个规则,把数字替换为*
String regex1 = "\\d+";
String regex2 = "\\d";
String replacement1 = "*";
String replacement2 = "";
String result1 = str.replaceAll(regex1, replacement1);  //Hello*World*java
String result2 = str.replaceAll(regex2, replacement1);  //Hello*******World****************java

String result3 = str.replaceAll(regex1, replacement2);  //HelloWorldjava

 *    d:获取功能举例:

 *  需求:将"da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"中3个字母的子字符串输出

                String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
String regex = "\\b\\w{3}\\b";  //    \\b是边界
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());

}

    注意:调group()方法前必须先调用find()方法才能返回一个group.不然会报// IllegalStateException: No match found

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值