如何使用正则表达式判断字符串中是否有中文,有的话输出。

时间:2021-12-28 18:46:35
功能:分类并输出字符串中的中文,大小写字母,空格以及符号。
问题:如何使用正则表达式判断并输出字符串中的中文?

PS:我知道下面这段代码有点丑 如何使用正则表达式判断字符串中是否有中文,有的话输出。,能否给我一段实现同样功能的代码参考一下。 如何使用正则表达式判断字符串中是否有中文,有的话输出。

package com.cjj.shiyiyueershisiri;

import java.util.Scanner;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

public static void main(String[] args) {
//存放字符串
String totalStr = null;
char[] totalStr1 = new char[400];
//存放小写字母
char[] abcStr = new char[100];
int abcCount = 0;
//存放大写字母
char[] ABCStr = new char[100];
int ABCCount = 0;
//存放数字
char[] num = new char[100];
int numCount = 0;
//存放符号
char[] seperateStr = new char[100];
int charCount = 0;
//空格符计数器
int konggeCount = 0;

System.out.println("请随意输入一段字符串~");
//读取键盘输入并存放到totalStr字符串中
totalStr = (new Scanner(System.in)).nextLine();
//将totalStr字符串转换为字符数组
totalStr1 = totalStr.toCharArray();

if(totalStr1.length != 0){
//判断是否存在中文
if(totalStr.matches(".*[\\u4e00-\\u9faf].*")){ //
System.out.println("存在中文");
}else{
System.out.println("不存在中文");
//判断并分组,并计数
for(int i = 0;i < totalStr1.length;i ++){
if(((totalStr1[i]+0) >= ('a'+0)) && ((totalStr1[i]+0) <= ('z'+0))){
abcStr[abcCount] = totalStr1[i];
abcCount++;
}else if(((totalStr1[i]+0) >= 65) && ((totalStr1[i]+0) <= 90)){
ABCStr[ABCCount] = totalStr1[i];
ABCCount++;
}else if(((totalStr1[i]+0) >= 48) && ((totalStr1[i]+0) <= 57)){
num[numCount] = totalStr1[i];
numCount++;
}else if(totalStr1[i] == ' '){
konggeCount++;
}else{ //如何识别所有符号? [\uFE30-\uFFA0]全角字符 
seperateStr[charCount] = totalStr1[i];
charCount++;
}
}
}

//输出结果:
System.out.print("您输入的原始字符串为:"+totalStr+"\n");
System.out.println("其中分类如下:");

System.out.print("小写字母共有 "+abcCount+" 个,分别为:");
for(int i = 0;i < abcStr.length;i++){
System.out.print(abcStr[i]+" ");
}
System.out.println();

System.out.print("大写字母共有 "+ABCCount+" 个,分别为:");
for(int i = 0;i < ABCStr.length;i++){
System.out.print(ABCStr[i]+" ");
}
System.out.println();

System.out.print("数字共有 "+numCount+" 个,分别为:");
for(int i = 0;i < num.length;i++){
System.out.print(num[i]+" ");
}
System.out.println();

System.out.print("符号共有 "+charCount+" 个,分别为:");
for(int i = 0;i < seperateStr.length;i++){
System.out.print(seperateStr[i]+" ");
}
System.out.println();

System.out.print("空格号“ ”共有 "+konggeCount+" 个。");


}else
System.out.println("您没有输入任何字符!");
}

}


7 个解决方案

#1


System.out.print("小写字母共有 "+abcCount+" 个,分别为:");
            for(int i = 0;i < abcStr.length;i++){
                System.out.print(abcStr[i]+" ");
            }
            System.out.println();

我知道这些重复的代码最好用函数来是实现。
但这个毕竟只是测试类。

#2



import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

public static void main(String[] args) {
checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");

}

 public static void checkfilename(String s){  
        s=new String(s.getBytes());//用GBK编码
        String pattern="[\u4e00-\u9fa5]+";  
        Pattern p=Pattern.compile(pattern);  
        Matcher result=p.matcher(s);                  
        while (result.find()) {
System.out.println(result.group());
}
  }

}

#3


都学JAVA了  还是面向过程的编程习惯 如何使用正则表达式判断字符串中是否有中文,有的话输出。

#4


引用 2 楼 qu1210 的回复:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

public static void main(String[] args) {
checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");

}

 public static void checkfilename(String s){  
        s=new String(s.getBytes());//用GBK编码
        String pattern="[\u4e00-\u9fa5]+";  
        Pattern p=Pattern.compile(pattern);  
        Matcher result=p.matcher(s);                  
        while (result.find()) {
System.out.println(result.group());
}
  }

}




package com.cjj.upgrades;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringClassfied {

static String str;

public StringClassfied(){
System.out.println("请随意敲击键盘,我可以帮你分析哦!");
Scanner sc = new Scanner(System.in);  //创建一个Scanner对象用来读取键盘输入
str = sc.nextLine(); //将读取到的数据转化为字符串类型
}

//分析
public void ClassifyString(String str){
        /*
 * 存在中文
 * 判断
 * public boolean matches(String regex)
 * 告知此字符串是否匹配给定的正则表达式。
 */
if(str.matches(".*[\\u4e00-\\u9faf].*")){
String pattern="[\u4e00-\u9fa5]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。
          
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将中文存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在中文,有  "+arrays.size()+" 个字,分别为:");
        Object[] zhongwen = arrays.toArray();
        print(zhongwen);
}else{
System.out.println("不存在中文。");
}

System.out.println();

//小写字母
if(str.matches(".*[a-z].*")){
String pattern="[a-z]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在小写字母,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在小写字母。");
}

System.out.println();

//大写字母
if(str.matches(".*[A-Z].*")){
String pattern="[A-Z]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在大写字母,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在大写字母。");
}

System.out.println();

//数字
if(str.matches(".*[0-9].*")){
String pattern="[0-9]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在数字,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在数字。");
}

System.out.println();

//空格号
if(str.matches(".*[ ].*")){
String pattern="[ ]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在空格号,有  "+arrays.size()+" 个");
        
}else{
System.out.println("不存在空格号。");
}

System.out.println();

//符号
if(str.matches(".*[^A-Za-z0-9_].*")){
String pattern="[^A-Za-z0-9_]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在符号,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在数字。");
}

System.out.println();



}

public void print(Object[] obj){
for(int i = 0;i < obj.length;i++){
System.out.print(obj[i]+" ");
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
StringClassfied sc1 = new StringClassfied();
sc1.ClassifyString(str);

}

}


感谢你的提示,我查阅了API以及搜索了正则表达式的使用。
根据你的提示,我修改了下代码(如上),但是有一个问题,就是符号比如逗号,句号如何用正则表达式来判断?

#5


引用 3 楼 chengshaoyong1 的回复:
都学JAVA了  还是面向过程的编程习惯 如何使用正则表达式判断字符串中是否有中文,有的话输出。

谢谢你的指正,我已经修改了代码,java本来就是面向对象的思想。

#6


 一些常用的正则匹配规则
   匹配中文字符的正则表达式: [u4e00-u9fa5]
  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
  匹配双字节字符(包括汉字在内):[^x00-xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  匹配空白行的正则表达式:ns*r
  评注:可以用来删除空白行
  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  匹配首尾空白字符的正则表达式:^s*|s*$
  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  评注:表单验证时很实用
  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
  评注:网上流传的版本功能很有限,上面这个基本可以满足需求
  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  评注:表单验证时很实用
  匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
  评注:匹配形式如 0511-4405222 或 021-87888822
  匹配腾讯QQ号:[1-9][0-9]{4,}
  评注:腾讯QQ号从10000开始
  匹配中国邮政编码:[1-9]d{5}(?!d)
  评注:中国邮政编码为6位数字
  匹配身份证:d{15}|d{18}
  评注:中国的身份证为15位或18位
  匹配ip地址:d+.d+.d+.d+
  评注:提取ip地址时有用

#7


引用 6 楼 ghx287524027 的回复:
 一些常用的正则匹配规则
   匹配中文字符的正则表达式: [u4e00-u9fa5]
  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
  匹配双字节字符(包括汉字在内):[^x00-xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  匹配空白行的正则表达式:ns*r
  评注:可以用来删除空白行
  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  匹配首尾空白字符的正则表达式:^s*|s*$
  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  评注:表单验证时很实用
  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
  评注:网上流传的版本功能很有限,上面这个基本可以满足需求
  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  评注:表单验证时很实用
  匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
  评注:匹配形式如 0511-4405222 或 021-87888822
  匹配腾讯QQ号:[1-9][0-9]{4,}
  评注:腾讯QQ号从10000开始
  匹配中国邮政编码:[1-9]d{5}(?!d)
  评注:中国邮政编码为6位数字
  匹配身份证:d{15}|d{18}
  评注:中国的身份证为15位或18位
  匹配ip地址:d+.d+.d+.d+
  评注:提取ip地址时有用

虽然没有匹配符号(如,。)的,但是也非常感谢!

#1


System.out.print("小写字母共有 "+abcCount+" 个,分别为:");
            for(int i = 0;i < abcStr.length;i++){
                System.out.print(abcStr[i]+" ");
            }
            System.out.println();

我知道这些重复的代码最好用函数来是实现。
但这个毕竟只是测试类。

#2



import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

public static void main(String[] args) {
checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");

}

 public static void checkfilename(String s){  
        s=new String(s.getBytes());//用GBK编码
        String pattern="[\u4e00-\u9fa5]+";  
        Pattern p=Pattern.compile(pattern);  
        Matcher result=p.matcher(s);                  
        while (result.find()) {
System.out.println(result.group());
}
  }

}

#3


都学JAVA了  还是面向过程的编程习惯 如何使用正则表达式判断字符串中是否有中文,有的话输出。

#4


引用 2 楼 qu1210 的回复:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

public static void main(String[] args) {
checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");

}

 public static void checkfilename(String s){  
        s=new String(s.getBytes());//用GBK编码
        String pattern="[\u4e00-\u9fa5]+";  
        Pattern p=Pattern.compile(pattern);  
        Matcher result=p.matcher(s);                  
        while (result.find()) {
System.out.println(result.group());
}
  }

}




package com.cjj.upgrades;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringClassfied {

static String str;

public StringClassfied(){
System.out.println("请随意敲击键盘,我可以帮你分析哦!");
Scanner sc = new Scanner(System.in);  //创建一个Scanner对象用来读取键盘输入
str = sc.nextLine(); //将读取到的数据转化为字符串类型
}

//分析
public void ClassifyString(String str){
        /*
 * 存在中文
 * 判断
 * public boolean matches(String regex)
 * 告知此字符串是否匹配给定的正则表达式。
 */
if(str.matches(".*[\\u4e00-\\u9faf].*")){
String pattern="[\u4e00-\u9fa5]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。
          
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将中文存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在中文,有  "+arrays.size()+" 个字,分别为:");
        Object[] zhongwen = arrays.toArray();
        print(zhongwen);
}else{
System.out.println("不存在中文。");
}

System.out.println();

//小写字母
if(str.matches(".*[a-z].*")){
String pattern="[a-z]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在小写字母,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在小写字母。");
}

System.out.println();

//大写字母
if(str.matches(".*[A-Z].*")){
String pattern="[A-Z]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在大写字母,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在大写字母。");
}

System.out.println();

//数字
if(str.matches(".*[0-9].*")){
String pattern="[0-9]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在数字,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在数字。");
}

System.out.println();

//空格号
if(str.matches(".*[ ].*")){
String pattern="[ ]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在空格号,有  "+arrays.size()+" 个");
        
}else{
System.out.println("不存在空格号。");
}

System.out.println();

//符号
if(str.matches(".*[^A-Za-z0-9_].*")){
String pattern="[^A-Za-z0-9_]";  //正则表达式
        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
        
        ArrayList arrays = new ArrayList();
        
        while (result.find()) { //如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
         //将对象存放到arrays中
            arrays.add(result.group());
        }
        System.out.print("存在符号,有  "+arrays.size()+" 个,分别为:");
        Object[] SmallLetter = arrays.toArray();
        print(SmallLetter);
}else{
System.out.println("不存在数字。");
}

System.out.println();



}

public void print(Object[] obj){
for(int i = 0;i < obj.length;i++){
System.out.print(obj[i]+" ");
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
StringClassfied sc1 = new StringClassfied();
sc1.ClassifyString(str);

}

}


感谢你的提示,我查阅了API以及搜索了正则表达式的使用。
根据你的提示,我修改了下代码(如上),但是有一个问题,就是符号比如逗号,句号如何用正则表达式来判断?

#5


引用 3 楼 chengshaoyong1 的回复:
都学JAVA了  还是面向过程的编程习惯 如何使用正则表达式判断字符串中是否有中文,有的话输出。

谢谢你的指正,我已经修改了代码,java本来就是面向对象的思想。

#6


 一些常用的正则匹配规则
   匹配中文字符的正则表达式: [u4e00-u9fa5]
  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
  匹配双字节字符(包括汉字在内):[^x00-xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  匹配空白行的正则表达式:ns*r
  评注:可以用来删除空白行
  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  匹配首尾空白字符的正则表达式:^s*|s*$
  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  评注:表单验证时很实用
  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
  评注:网上流传的版本功能很有限,上面这个基本可以满足需求
  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  评注:表单验证时很实用
  匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
  评注:匹配形式如 0511-4405222 或 021-87888822
  匹配腾讯QQ号:[1-9][0-9]{4,}
  评注:腾讯QQ号从10000开始
  匹配中国邮政编码:[1-9]d{5}(?!d)
  评注:中国邮政编码为6位数字
  匹配身份证:d{15}|d{18}
  评注:中国的身份证为15位或18位
  匹配ip地址:d+.d+.d+.d+
  评注:提取ip地址时有用

#7


引用 6 楼 ghx287524027 的回复:
 一些常用的正则匹配规则
   匹配中文字符的正则表达式: [u4e00-u9fa5]
  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
  匹配双字节字符(包括汉字在内):[^x00-xff]
  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
  匹配空白行的正则表达式:ns*r
  评注:可以用来删除空白行
  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
  匹配首尾空白字符的正则表达式:^s*|s*$
  评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  评注:表单验证时很实用
  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
  评注:网上流传的版本功能很有限,上面这个基本可以满足需求
  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  评注:表单验证时很实用
  匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
  评注:匹配形式如 0511-4405222 或 021-87888822
  匹配腾讯QQ号:[1-9][0-9]{4,}
  评注:腾讯QQ号从10000开始
  匹配中国邮政编码:[1-9]d{5}(?!d)
  评注:中国邮政编码为6位数字
  匹配身份证:d{15}|d{18}
  评注:中国的身份证为15位或18位
  匹配ip地址:d+.d+.d+.d+
  评注:提取ip地址时有用

虽然没有匹配符号(如,。)的,但是也非常感谢!