正则表达式 一个数字。可以是两位也可以是一位如果是一位。那这一位就不能是0如果是两位,那第一位可以是0,这时第二位就不能是0如果第一位不是0,第二位就可以是0。怎么写啊??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一篇儿资料,自己看嘛^正则表达式概述:一个正则表达式可以由普通字符或元字符组合而成。元字符指具有特殊意义的字符。正则表达式入门:表达式 说明 使用例^ 匹配一行的开头。 例:1,^hello。匹配行头以hello开头的字符串。$ 匹配一行的结尾 例:1,hello$。匹配行尾以hello结尾的字符串。. 匹配改行以外的任何字符 例:1,hello.world。匹配诸如hello world,hello-world等字符串。[] 匹配被括起来的任何一个字符 例:1,[abc]。匹配a或者b或者c。 2,r[aeu]d。匹配rad或red或rud。[A-Z] 匹配从A-Z的任一个字符。 例:1,a[A-Z]c。匹配aAc,aBc,...,aZc。[a-z] 匹配从a-z的任一个字符。 例:1,a[a-z]c。匹配aac,abc,...,azc。[0-9] 匹配从0-9的任一个数字。 例:1,a[0-9]c。匹配a0c,a1c,...,a9c。[^] 匹配任何没有被括起来的一个字符。与[]相左。 例:1,[^abc]。则匹配除a或b或c以外的其他字符。* 匹配*前面的一个字符任意次数(0到多次)。 例:1,ab*。则匹配a或ab或abb,abbb等+ 匹配+前面一个字符1到多次。 例:1,ab+。则匹配ab或abb或abbb,abbbb等? 匹配?前面一个字符0到1次。 例:1,ab?。则匹配a或ab。{n} 匹配之前一个字符n次。n为整数。 例:1,ab{2}。则匹配abb。{n,} 匹配之前一个字符n次或大于n次。n为整数。 例:1,ab{2,}。则匹配abb,abbb等。{n,m} 匹配之前一个字符大于等于n次,小于等于m次。n,m为整数。 例:1,ab{2,5}。则匹配abb,abbb,abbbb,abbbbb。| 匹配条件的或(OR)运算。匹配之前的运算式或匹配之后的运算式。 例:1,hello|world。则匹配hello或者world。() 分组。被()括起来的运算式被看作为一组(group)。可以用1,9来加以引用。JAVA里的正则表达式:JAVA里有以下几个方法或类跟正则表达式的处理有关。String.matches(regex)String.replaceAll(regex, value)java.util.regex.Matcherjava.util.regex.Pattern下面我们举例来具体加以说明。例1:判断是否为数字//判断是否为数字,返回值为trueSystem.out.println("12345".matches("[0-9]+"));//判断是否为数字,返回值为falseSystem.out.println("12345a".matches("[0-9]+"));例2:判断是否为email地址//匹配所有数字,大小写字母,下画线,横线的字符组合String segnamePtn = "[0-9a-zA-Z_-]+";//匹配.com或.orgString suffixPtn = "\\.((com)|(org))";//email的正则表达式String emailPtn = segnamePtn + "@" + segnamePtn + suffixPtn;//判断是否为email,返回falseSystem.out.println("12345".matches(emailPtn));//判断是否为email,返回trueSystem.out.println("[email protected]".matches(emailPtn));//判断是否为email,返回false。因为不是以.com或.org结尾System.out.println("x21@syboos".matches(emailPtn));例3:匹配并替换:<a href="#{url}" target="#{target}">this is a test</a>,将其中#{url},#{target}分别替换为url,target。 //#{xxx}->xxx private String matchReplace(String value) { String ret = value; String patternRegex = "(#\\{(.*?)\\})";//#{xxx} Pattern pattern = Pattern.compile(patternRegex); Matcher matcher = pattern.matcher(value); String expression = null; String tagname = null; if(matcher.find()){ int group = matcher.groupCount(); if (group == 2) { expression = matcher.group(1); //取得#{xxx} tagname = matcher.group(2); //取得xxx //替换#{xxx}->xxx ret = value.replaceAll("\\Q" + expression + "\\E", tagname); } } if (!ret.equals(value)) { ret = matchReplace(ret); } return ret; }测试代码:System.out.println( matchReplace("<a href=\"#{url}\" target=\"#{target}\">this is a test</a>") );*输出:*<a href="url" target="target">this is a test</a>取出第一个英文单词: String str="firstSecondThird"; String patternRegex = "^([a-z]*?)([A-Z]{1}[a-zA-Z]*)"; Pattern pattern = Pattern.compile(patternRegex); Matcher matcher = pattern.matcher(str); String firstWord = null; String otherWords = null; if(matcher.find()){ int group = matcher.groupCount(); if (group != 2) { return; } firstWord = matcher.group(1); otherWords = matcher.group(2); } System.out.println(firstWord + "+" + otherWords);输出:first+Second+Third以下例子:取出每一个单词(单词头字母以大写或小写开头并以小写或数字结尾)String str="firstSecondThird";String patternRegex = "([a-zA-Z]{1}([a-z0-9]\*)?)";Pattern pattern = Pattern.compile(patternRegex);Matcher matcher = pattern.matcher(str);String words = "";while(matcher.find()){ words += matcher.group(1) + ","; }System.out.println("----");System.out.println(words);System.out.println("----");输出:first,Second,Third, 顶一下2楼的,可以用 String[] ss = new String[] {"0","1","01","11","10","00"}; for (String s : ss) { System.out.println(s + "=" + s.matches("^([1-9]{1}|[0-9]{1}[1-9]{1}|[1-9]{1}[0-9]{1}){1}$")); }输出为0=false1=true01=true11=true10=true00=false public class Test { public static void main(String[] args) { String[] strs = {"0", "1", "01", "11", "10", "00"}; String str = "\\d((?<!0)|(?=[1-9]))\\d?"; for(String s : strs) { System.out.println(s + " " + s.matches(str)); } }}0 false1 true01 true11 true10 true00 false 也来玩玩String[] str = { "0", "1", "01", "11", "10", "00", "abc", "100" };String regex = "^([\\d&&[^0]]|[\\d][\\d&&[^0]]|[\\d&&[^0]][\\d])$";for (String input : str) { System.out.println(input + ":" + input.matches(regex));}/*0:false1:true01:true11:true10:true00:falseabc:false100:false*/ jdbc连接mysql异常。 直接在libraries里建立一个目录,放所有jar文件 焦点问题。。 求reflection中getMethods()和invoke()的用法?? 为什么windows下可以运行,linux下就出错? 字符串的处理问题,请帮忙看看 谁有即时通信的代码 在客户端的网页中,有一APPLET,要把这APPLET作为图片放入一个excel文件中,让客户端下载,可以实现么? 帮帮忙。很简单的 内部类问题??????,,,,,,,,,,, swing界面间 传递数值的问题 Java sql调用后存储格式问题请高手帮忙看看
正则表达式概述:
一个正则表达式可以由普通字符或元字符组合而成。元字符指具有特殊意义的字符。
正则表达式入门:
表达式 说明 使用例
^ 匹配一行的开头。 例:1,^hello。匹配行头以hello开头的字符串。
$ 匹配一行的结尾 例:1,hello$。匹配行尾以hello结尾的字符串。
. 匹配改行以外的任何字符 例:1,hello.world。匹配诸如hello world,hello-world等字符串。
[] 匹配被括起来的任何一个字符 例:1,[abc]。匹配a或者b或者c。
2,r[aeu]d。匹配rad或red或rud。
[A-Z] 匹配从A-Z的任一个字符。 例:1,a[A-Z]c。匹配aAc,aBc,...,aZc。
[a-z] 匹配从a-z的任一个字符。 例:1,a[a-z]c。匹配aac,abc,...,azc。
[0-9] 匹配从0-9的任一个数字。 例:1,a[0-9]c。匹配a0c,a1c,...,a9c。
[^] 匹配任何没有被括起来的一个字符。与[]相左。 例:1,[^abc]。则匹配除a或b或c以外的其他字符。
* 匹配*前面的一个字符任意次数(0到多次)。 例:1,ab*。则匹配a或ab或abb,abbb等
+ 匹配+前面一个字符1到多次。 例:1,ab+。则匹配ab或abb或abbb,abbbb等
? 匹配?前面一个字符0到1次。 例:1,ab?。则匹配a或ab。
{n} 匹配之前一个字符n次。n为整数。 例:1,ab{2}。则匹配abb。
{n,} 匹配之前一个字符n次或大于n次。n为整数。 例:1,ab{2,}。则匹配abb,abbb等。
{n,m} 匹配之前一个字符大于等于n次,小于等于m次。n,m为整数。 例:1,ab{2,5}。则匹配abb,abbb,abbbb,abbbbb。
| 匹配条件的或(OR)运算。匹配之前的运算式或匹配之后的运算式。 例:1,hello|world。则匹配hello或者world。
() 分组。被()括起来的运算式被看作为一组(group)。可以用1,9来加以引用。
JAVA里的正则表达式:
JAVA里有以下几个方法或类跟正则表达式的处理有关。
String.matches(regex)
String.replaceAll(regex, value)
java.util.regex.Matcher
java.util.regex.Pattern
下面我们举例来具体加以说明。
例1:
判断是否为数字
//判断是否为数字,返回值为true
System.out.println("12345".matches("[0-9]+"));
//判断是否为数字,返回值为false
System.out.println("12345a".matches("[0-9]+"));
例2:
判断是否为email地址
//匹配所有数字,大小写字母,下画线,横线的字符组合
String segnamePtn = "[0-9a-zA-Z_-]+";
//匹配.com或.org
String suffixPtn = "\\.((com)|(org))";
//email的正则表达式
String emailPtn = segnamePtn + "@" + segnamePtn + suffixPtn;//判断是否为email,返回false
System.out.println("12345".matches(emailPtn));
//判断是否为email,返回true
System.out.println("[email protected]".matches(emailPtn));
//判断是否为email,返回false。因为不是以.com或.org结尾
System.out.println("x21@syboos".matches(emailPtn));
例3:
匹配并替换:<a href="#{url}" target="#{target}">this is a test</a>,将其中#{url},#{target}分别替换为url,target。
//#{xxx}->xxx
private String matchReplace(String value) {
String ret = value; String patternRegex = "(#\\{(.*?)\\})";//#{xxx} Pattern pattern = Pattern.compile(patternRegex);
Matcher matcher = pattern.matcher(value); String expression = null;
String tagname = null;
if(matcher.find()){
int group = matcher.groupCount();
if (group == 2) {
expression = matcher.group(1); //取得#{xxx}
tagname = matcher.group(2); //取得xxx //替换#{xxx}->xxx
ret = value.replaceAll("\\Q" + expression + "\\E", tagname);
}
}
if (!ret.equals(value)) {
ret = matchReplace(ret);
} return ret;
}
测试代码:
System.out.println(
matchReplace("<a href=\"#{url}\" target=\"#{target}\">this is a test</a>")
);
*输出:*
<a href="url" target="target">this is a test</a>
取出第一个英文单词:
String str="firstSecondThird";
String patternRegex = "^([a-z]*?)([A-Z]{1}[a-zA-Z]*)";
Pattern pattern = Pattern.compile(patternRegex);
Matcher matcher = pattern.matcher(str);
String firstWord = null; String otherWords = null;
if(matcher.find()){
int group = matcher.groupCount();
if (group != 2) {
return;
} firstWord = matcher.group(1);
otherWords = matcher.group(2); } System.out.println(firstWord + "+" + otherWords);
输出:
first+Second+Third
以下例子:取出每一个单词(单词头字母以大写或小写开头并以小写或数字结尾)
String str="firstSecondThird";
String patternRegex = "([a-zA-Z]
{1}([a-z0-9]\*)?)";
Pattern pattern = Pattern.compile(patternRegex);
Matcher matcher = pattern.matcher(str);
String words = "";
while(matcher.find())
{ words += matcher.group(1) + ","; }System.out.println("----");
System.out.println(words);
System.out.println("----");
输出:
first,Second,Third,
String[] ss = new String[] {"0","1","01","11","10","00"};
for (String s : ss) {
System.out.println(s + "=" + s.matches("^([1-9]{1}|[0-9]{1}[1-9]{1}|[1-9]{1}[0-9]{1}){1}$"));
}
输出为
0=false
1=true
01=true
11=true
10=true
00=false
public static void main(String[] args) {
String[] strs = {"0", "1", "01", "11", "10", "00"};
String str = "\\d((?<!0)|(?=[1-9]))\\d?";
for(String s : strs) {
System.out.println(s + " " + s.matches(str));
}
}
}0 false
1 true
01 true
11 true
10 true
00 false
String regex = "^([\\d&&[^0]]|[\\d][\\d&&[^0]]|[\\d&&[^0]][\\d])$";
for (String input : str) {
System.out.println(input + ":" + input.matches(regex));
}/*
0:false
1:true
01:true
11:true
10:true
00:false
abc:false
100:false
*/