首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [向bao110908提问]请详细解释一下你的正则表达式 [已结帖,结帖人:tteesstt]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tteesstt
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-07-16 22:55:47 楼主
    Java code
    // 限定条件 final String CONDITION = "(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)"; // 允许出现的字符 final String SPECIAL_CHAR = "[-A-Za-z0-9!$%&()/;<?{}\\[\\]^\\\\]"; // 数量 final String QUANTITY = "{8,16}";


    2,3 都好理解,第一个理解不了,能否详细介绍一下呢。明天加分到200.

    拜托了。。。。


    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • java2000_net_test
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-16 22:55:491楼 得分:0
    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tteesstt】截止到2008-07-16 22:55:55的历史汇总数据(不包括此帖):
    发帖的总数量:111                      发帖的总分数:7300                    每贴平均分数:65                     
    回帖的总数量:78                      得分贴总数量:8                        回帖的得分率:10%                     
    结贴的总数量:111                      结贴的总分数:7300                   
    无满意结贴数:0                        无满意结贴分:0                       
    未结的帖子数:0                        未结的总分数:0                       
    结贴的百分比:100.00%              结分的百分比:100.00%                 
    无满意结贴率:0.00  %              无满意结分率:0.00  %                 
    敬礼!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hmsuccess
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-16 23:44:222楼 得分:0
    关键你要理解“?=x”的意义:后面允许出现字母x
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bao110908
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-07-17 00:03:333楼 得分:200
    要解释这个,得先弄清楚 (?=) 这个表示什么意思,这个的意思我在你另外的一个帖子里已经说得很详细了

    http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html
    1 楼的回复

    (?=.*[a-z]) 表示当前位置后面必须出现 .*[a-z] 的字符,这个可以理解为必须出现小写字母。
    或者可以理解为某一个字符间的缝隙必须满足的条件,这个仅仅作为条件判断并不能匹配任何字
    符,因为这属于非捕获组中的环视(lookarround)零宽度匹配。

    举个大家常见的例子:

    表达式:Win(?=XP)
    现有字符串 WinXP 和 WinNT,在应用这个表达式时前者能与之进行匹配,为什么呢?

    当匹配器指示到 (?=XP) 时,也就是在 n 字母后面的缝隙,这个缝隙必须满足的
    条件是:后面的字符必须是 XP,如果是的话,匹配成功,否则匹配失败。由于
    (?=XP) 是匹配缝隙的,因此并不会把 XP 给匹配输出,而只输出了 Win 因此,这
    个表达式的语义可以看作是:找到后面为“XP”字符所有的 Win。

    假如,我们把表达式写成 Win(?=XP)(?=NT) 这样的话,那么这个语义是:找出后面
    为“XP”并且为“NT”字符所有的 Win 可以想象,这是个
    永远无法满足的匹配。(?=XP)(?=NT) 这个表示当前的缝隙必须同时满足的条件

    把这个表达式再改一下,改成 Win(?=.*XP)(?=.*NT) 这个表示 Win 的后面必须出现
    XP 与 NT,位置和顺序都是无关的(这主要是 .* 的作用)。当然了这个表达式的效
    率是比较低的,得向后进行两次断言。

    如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始
    进行向后断言,首先对 .*XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断
    言完成,再对 .*NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完
    成,因此表达式 Win(?=.*XP)(?=.*NT) 能对 WincbaXPabcNT 进行匹配。

    同理 WincbaNTabcXP 也是同样的效果。

    如果能理解上面的这些,对于 (?=.*[a-z])(?=.*[A-Z])(?=.*\\d) 这个的理应该不会
    很难吧,这个只不过是必须同时满足三个条件。

    这个表达式在开始部分就进行断言,即索引为 0 的地方,也就是第一个字符的前面的
    缝隙,这个缝隙后面的字符必须满足 .*[a-z]  .*[A-Z]  .*\\d  三个条件,也就是说
    必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bao110908
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-07-17 00:17:554楼 得分:0
    至于表达式 2 的使用,也就是 [  ] 内字符的转义需要注意一下。

    ^ 和 - 在 [  ] 结构的表达式中是有一定意义的。

    [^abc] 表示除 abc 以外所有的字符,注意,这是放在最前面表示这个意思,
    如果改成 [a^bc] 这个仅表示 a ^ b c 四个字符。如果需要匹配 ^ 这个字符
    的话,千万不要把它放在第一个,如果一定要放在第一个的话,得使用转义符。

    - 在 [  ] 表示字符的范围,比如 [a-z] 表示 a 与 z 之间的 26 个字母,
    [a-zA-Z] 这个表示 a-z 和 A-Z 的 52 个字母。使用范围得注意了,如果写成
    [z-a] 的话,在 Pattern.compile 编译表达式时会对范围进行检查,这时会产
    生异常,因此在使用 - 范围时,后面的 Unicode 值必须大于等于前面的 Unicode
    值。

    如果要匹配“-”的话,尽量不要把 - 这个放在字符之间,可以放在 [  ] 的两边。
    比如 [-a-z] 这就能匹配 26 个小写字母和“-”了。当然了,我们也可以写成
    [a-z-A-Z] 这个可以匹配 52 字母和“-”,但是这样很不直观,我们宁愿写成
    [a-zA-Z-] 或者 [-a-zA-Z] 这样。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bao110908
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-07-17 00:20:345楼 得分:0
      火龙果累了,得睡觉去了~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jdlsfl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 00:28:156楼 得分:0
    火龙果真牛,学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jdlsfl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 00:30:107楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cursor_wang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 00:56:588楼 得分:0
    火龙果已经解释了够详细的了.建议楼主还是要系统的学习下.请看下面链接.
    请点这里看正则表达式30分钟入门教程
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jishu_vip
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 08:43:139楼 得分:0
    火龙果不是一般的牛!

    正则太厉害了。

    不过正则这个东西还真是管用!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rczjp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 08:46:1010楼 得分:0
    bao110908 火龙果  解释的相当清晰 赞一个....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhuyx808
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 08:55:3811楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yangfuen637200
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 09:25:0012楼 得分:0
    ding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gannbatte
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 09:41:0313楼 得分:0
    学习了。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Maozhj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 10:55:2714楼 得分:0
    见识了~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • SlaughtChen
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 11:03:0115楼 得分:0
    学习啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chao19841
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 11:21:2916楼 得分:0
    引用 9 楼 jishu_vip 的回复:
    火龙果不是一般的牛!

    正则太厉害了。

    不过正则这个东西还真是管用!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liunian812
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 14:22:2517楼 得分:0
    学习学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangfeizjk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 15:42:0418楼 得分:0
    记号,哈哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ziruobing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-17 22:57:0819楼 得分:0
    CSDN的牛人果然多!学习了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • buaabyy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 09:36:4720楼 得分:0
    呵呵,下个js帮助吧,上面全有!
    就这么回事!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • buaabyy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 09:37:3121楼 得分:0
    看了,你也记不住,我每次都看帮助.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shidouli
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 11:45:3722楼 得分:0
    火龙果牛!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aiqinzhe
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 11:53:2023楼 得分:0
    学习之~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuys168
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 12:08:1024楼 得分:0
    正则表达式的?=术语是叫正向前瞻。还有叫负向前瞻(te(?=ncent) 要用小括号括起来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sijianbnbn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 14:41:5725楼 得分:0
    正则表达式的?=术语是叫正向前瞻。还有叫负向前瞻(te(?=
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenhongxin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 17:04:0826楼 得分:0
    关键你要理解“?=x”的意义:后面允许出现字母x
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenhongxin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-18 17:05:1227楼 得分:0
    把这个表达式再改一下,改成 Win(?=.*XP)(?=.*NT) 这个表示 Win 的后面必须出现
    XP 与 NT,位置和顺序都是无关的(这主要是 .* 的作用)。当然了这个表达式的效
    率是比较低的,得向后进行两次断言。

    如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始
    进行向后断言,首先对 .*XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断
    言完成,再对 .*NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完
    成,因此表达式 Win(?=.*XP)(?=.*NT) 能对 WincbaXPabcNT 进行匹配。

    同理 WincbaNTabcXP 也是同样的效果。

    如果能理解上面的这些,对于 (?=.*[a-z])(?=.*[A-Z])(?=.*\\d) 这个的理应该不会
    很难吧,这个只不过是必须同时满足三个条件。

    这个表达式在开始部分就进行断言,即索引为 0 的地方,也就是第一个字符的前面的
    缝隙,这个缝隙后面的字符必须满足 .*[a-z]  .*[A-Z]  .*\\d  三个条件,也就是说
    必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lhyblue
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-20 23:17:5928楼 得分:0
    http://www.eimhe.com/bbs/?fromuid=494589
    更多的学习资料提供给广大的IT朋友们
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • 83born
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-21 09:13:4429楼 得分:0
    大家如果编译原理的词法分析部分学的好,正则表达式一点都不难
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kuku12bing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-21 10:28:4730楼 得分:0
    回帖是一种美德!传说每天回帖即可获得 10 分可用分!回帖是一种美德!传说每天回帖即可获得 10 分可用分!回帖是一种美德!传说每天回帖即可获得 10 分可用分!回帖是一种美德!传说每天回帖即可获得 10 分可用分!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnmmbd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-21 15:53:5231楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zfl110
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-21 16:48:1732楼 得分:0
    记号
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tonggulu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-22 09:26:0933楼 得分:0
    ***************************************************************************

    思想决定行动,行动决定习惯,习惯决定命运.
    程序员在深圳QQ群,交流思想,如饮美酒.

    部份专业群介绍:
    c++群:  15195967(此群流动性相当大,有时候一个月上百人被迫离群)
    java群: 11878667(此群人数较少,但不知道群主会不会让你进群,进群要求很高)
    英语学习群:  23864353(此群人气一般,交流也车不够活跃)
    c++Ⅱ:  17409451(此群是C++第一群的补充,人气自然差点)
    嵌入式开发群:  37489763(此群高手还是有的,气氛一般)
    移动开发群:  31501597(此群人气和氛围都还可以)
    创业群:  33653422(此群名字就注定了讨论的东西一般没有结果.)


    部份高级程序员群(高级群致力于发现和培养专家,人气最旺,淘汰率高,不自信者不要加入):

    高级群I:17538442
    高级群II:7120862

    部份初、中级程序员群:
    第三群:2650485
    第五群:29537639
    第四群:28702746
    第六群:10590618
    第七群:10543585
    第八群:12006492
    第九群:19063074
    第十群:2883885
    第十一群:25460595
    第十二群:9663807

    深圳程序员QQ群联盟成立2005年,拥有三十个以上的QQ群,人数超三千多人,大量高手,从业于大公司(微软、IBM,SUN,华为)、系统分析员(包括参加过上亿元的项目的架构师)。每个人都自信而上进.推荐:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 java群: 11878667  mobile:31501597嵌入式:37489763 
    ——————————————————————————————————————————
    如果你不是第一次看到此广告,说明我们最近T了一些人,因为我们要不断提升群的质量,保证名副其实.
    -------------------------------------------------------------------------------------
    在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:
          1. 通读手册,试着自己找答案。
          2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。
          3. 在网上搜索(个人推荐google~)。
          4. 向你身边精于此道的朋友打听。
    我想我们首先应该靠自己解决问题,然后才是问
    ------------------------------------------------------------------------------------------------------

    技术QQ群是一个体现群体智慧的地方,无价值的发言会给别人带来噪音和负担,如果不同意以上观点的请勿加入!

    *****************************************************************************
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oogamiyiqilou
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-07-22 10:46:0934楼 得分:0
    学习了 写得很明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chendabian
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 18:43:5835楼 得分:0
    记号
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lonelyscud
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 22:42:0836楼 得分:0
    路过学习!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fulton_xc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-04 23:23:3037楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ziruobing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-05 11:08:2938楼 得分:0
    // 限定条件
    (?=.*[a-z])(?=.*[A-Z])(?=.*\\d)

    请问一下,这种表达式在validation.xml里不适用?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • llddy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-17 17:11:2939楼 得分:0
    路过~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sissyesshr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2009-06-17 13:46:3140楼 得分:0
    该回复于2009-06-26 09:23:26被版主删除
    修改 删除 举报 引用 回复