确保字符串是1-100的数,怎么写正则?
可以是001,098。
可以是001,098。
解决方案 »
- java小问题
- Swing程序面板上使用搜索框
- 给出一个int型数,比如5310 ,给他分成四个128以内的数,注意 不是随机的,通过这四个数不管如何计算,最后能得到5310
- 请问一个JAVA多态问题!
- Java怎么判断输入的字符的大小写呢?
- 简单的request问题
- 急!用java开发的程序,怎么将二进制流数据传递给服务器端的asp?
- 如何使用相对路径定位资源文件
- 一品狐在吗,追分
- 大家进来帮忙看看。IllegalThreadStateException
- 接口、继承;什么时候使用接口?什么时候使用继承?为什么要使用接口?为什么要使用继承?
- 再请教,socket客户端发送的信息为何服务器商接收不到?
String s = a;
记住调用包java.util.Random
String s = "0*\\d*[1-9]|100";
String s1 = "099";
if(s1.matches(s)) {
System.out.println("ok");
}
System.out.println("1".matches(s));//true
System.out.println("12".matches(s));//true
System.out.println("01".matches(s));//true
System.out.println("001".matches(s));//true
System.out.println("013".matches(s));//true
System.out.println("0014".matches(s));//false
System.out.println("100".matches(s));//true
System.out.println("0100".matches(s));//false
System.out.println("0".matches(s));//false
public static void main(String[] args) {
String regex = "(?!^0?0?0$)[01]?[0-9]?[0-9]";
System.out.println("1".matches(regex));
System.out.println("12".matches(regex));
System.out.println("01".matches(regex));
System.out.println("001".matches(regex));
System.out.println("013".matches(regex));
System.out.println("0014".matches(regex));
System.out.println("100".matches(regex));
System.out.println("0100".matches(regex));
System.out.println("0".matches(regex));
}
}
String s ="0?\\d?[1-9]|100";
(?!^0?0?0$):lookahead 后视功能,不允许后面出现的字符。这里 后面不允许出现 0,00,000,
这样可以把 0 给排除掉,必须加 ^ $ 让其作用于整个字符串。(?:0?[0-9]?[0-9]|100):(?:) 非捕获组,用于选择结构(|)的分隔,数字后的 ? 表示可有可无,
以满足百位和十位上的数字,最后一个 [0-9] 即个位数字,必须存在。
(?!^0?0?0$)也是非捕获组吧,(?:X) X,作为非捕获组
(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
的非捕获组 (?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组 看完这个之后,没明白
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
String a = i + "";
String b = "0" + i;
String c = "00" + i;
isMatch(a);
isMatch(b);
isMatch(c);
}
} public static void isMatch(String s) {
String regex = "(?!^0?0?0$)(?:0?[0-9]?[0-9]|100)";
if (!s.matches(regex)) {
System.out.println(s + "失败");
}
}
这个我不太理解它的意图和下面的写法有区别吗?请教各位. public static void main(String[] args) {
for (int i = 0; i <= 100; i++) {
String a = i + "";
String b = "0" + i;
String c = "00" + i;
isMatch(a);
isMatch(b);
isMatch(c);
}
} public static void isMatch(String s) {
String regex = "(?!^0?0?0$)((0?[0-9]?[0-9])|100)";
if (!s.matches(regex)) {
System.out.println(s + "失败");
}
}
与捕获组 ( ) 的意思一样也是将其作为一组进行处理,与捕获组的区别在于不捕获匹配的文本,
仅仅作为分组。
比如:要匹配 123123 这个,就可以写为 (123)\1 使用反向引用,这时只能用捕获组,在匹配
123 后会保留在内存中,便于反向引用,而 (?:123) 在匹配完后则不会保留,区别仅在于此。(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
用于标志匹配,比如:表达式 (?i)abc(?-i)def 这时,(?i) 打开不区分大小写开关,abc 匹配
不区分大小地进行匹配,(?-i) 关闭标志,恢复不区分大小写,这时的 def 只能匹配 def(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
与上面的类似,上面的表达式,可以改写成为:(?i:abc)def,或者 (?i)abc(?-i:def)(?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?=X) 表示当前位置(即字符的缝隙)后面允许出现的字符,比如:表示式 a(?=b),在字符串为
ab 时,可能匹配 a,后面的 (?=b) 表示,a 后面的缝隙,可以看作是零宽度。
(?!X) 表示当前位置后面不允许出现的字符(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
这两个与上面两个类似,上面两个是向后看,这个是向前看(?>X) X,作为独立的非捕获组
匹配成功不进行回溯,这个比较复杂,也侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。
进行分隔,所以 (0?[0-9]?[0-9]) 这一对括号可以去掉,举几个例子。ab|c 这样匹配 ab 或者 c
a(b|c) 这样匹配 ab 或者 ac
a(bb|c) 这样匹配 abb 或者 ac
a(bb|cc) 这样匹配 abb 或者 acc再有,由于所匹配的东西并不需要在内存中保留,为了效率起见,可以改为
(?:0?[0-9]?[0-9]|100) 这样(0?[0-9]?[0-9]|100) 这个使用了捕获组的方式,表示在匹配完成后,在内存中会保留匹配
到的东西,便于后面的反向引用(就像 \1 这样的反向引用)。而 (?: 在匹配完后并不会在内存中保留,由于这里没有反向引用,只是一个简单的匹配,所以说
没有必要保留起来,节省几个字节的内存 :)
匹配成功不进行回溯,这个比较复杂,也侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。这个我没有明白啊 。。
表示输入的开头和结束,在启用 multiline 时,^ $ 表示一行的开始和结束。如果用于单行的 matches 匹配,^ $ 写与不写是一个样的。String regex = "(?!^0?0?0$)(?:0?[0-9]?[0-9]|100)";
但是,上面的 (?!^0?0?0$) 中的 ^ $ 就必须写了,以限定整个字符串的匹配,如果
写成(?!0?0?0$) 这样,像 10(最后一个为“0”)也会匹配失败的,如果写成
(?!^0?0?0) 这样,像 015(以“0”开始的)也将匹配失败。
所有的空格和结束处所有的空格都替换去掉。String.prototype.trim = function() {
return this.replace(/^\s+/, "").replace(/\s+$/, "");
}
function trim(str) {
return str.replace(/(^\s*)|(\s*$)/g,"");
}
JavaScript 中的标志共有 m g i 三个,可以混合着使用g 表示全局替换,否则只替换一次m 表示多行模式,有这个标志时 ^ $ 可以匹配一行的开头和一行的结束,否则只匹配输入的开头和结束i 表示不区分大小写进行匹配
请教一下:
1、(?=) (?!) 可以限制后面的?怎么有时候也看到(?=) (?!) 放在正则表达式的末尾呢?
如果这样写,是什么意思呢?
String regex = "(?!^0?0?0$)(?:0?[0-9]?[0-9]|100)";
2、lookbehind和lookahead区别是什么?是不是指限制前面或者后面的字符?
学习正则有段时间了,但是今天看了火龙果兄的好几个帖子,才发现自己对正则的理解还远远不够。
其实对于正则的描述,Java API上都有。不过自己没有过多深入地去理解分析,加上没有代码示例,增加了理解上的困难。
几乎所有的火龙果兄的回帖里,都会针对对应的概念举出对应的例子,让我理解起来快上很多。
今天看了好多帖子了,不回都不好意思了。
非常感谢!
JavaString s = "\\b[0]*(100|[0-9][0-9]|[1-9])\\b"
[0]*(100|[0-9][0-9]|[1-9])String s = "[0]*(100|[0-9][0-9]|[1-9])";
String s = "001";
System.out.println(s.matches(regex));
会匹配到0,50楼也是。试试这个String s = "0*(100|[1-9][0-9]|[1-9])";