V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanhj2006
V2EX  ›  Java

咨询 Java 正则提取

  •  
  •   yanhj2006 · 2018-10-11 18:19:08 +08:00 · 2864 次点击
    这是一个创建于 2269 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有类似域名,s1.a1.apple.com.abc.coms1.a1.apple.com 想提取s1.a1.apple.com,即从前开始优先匹配的正常域名,尝试这样 java 中用正则 ([\w\-]*\.?)+\.(com|cn|net|org)

     while (matcher.find())
       matcher.group
    

    一直提取是是全域名,求正确的正则

    10 条回复    2018-10-15 13:47:44 +08:00
    xuhaoyangx
        1
    xuhaoyangx  
       2018-10-11 18:31:32 +08:00
    你是不是用错了。
    anyele
        2
    anyele  
       2018-10-11 18:38:54 +08:00 via Android
    @xuhaoyangx 这是什么字体
    onexpiece
        3
    onexpiece  
       2018-10-11 18:55:22 +08:00
    (?:\.?[\w\-]*)+?\.(?:com|cn|net|org)
    yanhj2006
        4
    yanhj2006  
    OP
       2018-10-11 20:51:28 +08:00
    @onexpiece 关键是?的非贪心模式,谢谢
    xuhaoyangx
        5
    xuhaoyangx  
       2018-10-12 00:06:45 +08:00
    @anyele #2 mac os 自带
    970749518nkq
        6
    970749518nkq  
       2018-10-12 00:47:18 +08:00 via Android
    @anyele Monaco
    Droi
        7
    Droi  
       2018-10-12 09:32:28 +08:00
    用 perl 写的,不知道 java 有用不
    $var = "s1.a1.apple.com.abc.com";

    $var =~ m/((?>[\w.]+(?>(com|net|org|cn)(?=[\.\\])))|([\w.]+(com|net|cn|org)))/;

    print "$1";
    tamer
        8
    tamer  
       2018-10-12 10:28:04 +08:00
    [\\w\\-]
    这\w 后的\-是个什么意思?...没见过这种语法呢, 有没老哥给解个惑
    Droi
        9
    Droi  
       2018-10-12 10:41:20 +08:00
    重新改了下
    $var =~ m/(([\w.]+(?>\.(com|net|org|cn)(?=[\.\/])))|([\w.]+\.(com|net|cn|org)))/;
    但是无法匹配 s1.a1com.org.aaa.net.bb.coms1.a1com.org
    thinkmore
        10
    thinkmore  
       2018-10-15 13:47:44 +08:00
    @tamer 我的理解是这样的,-这个字符放在中间应该是区间的意思,但是指向表明这一个字符,所以用了转义吧。
    或者这样写就好理解了[-\\w]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2688 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:58 · PVG 09:58 · LAX 17:58 · JFK 20:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.