<html>
<head>
<title>Direct e-SCOTT</title>
<meta http-equiv="content-Type" content="text/html;charset=x-sjis">
</head><body>
<form method="POST" action="/DSCT1000">
<b><font size=3>INPUT FORM<p>
USERID<input type="text" name="userId" size=8 length=8 value="kkk">
PASSWORD<input type="text" name="passwd" size=8 length=8 value="000000">
</form>
</body>
</html>求一正则,将上面html中,value后面的值取出。越简洁越好,因为有很多这样的值。本人正则不懂,先谢谢了。

解决方案 »

  1.   

    public class Test
    {
    private static String str = "<html>\r\n" + 
    "<head>\r\n" + 
    "<title>Direct e-SCOTT</title>\r\n" + 
    "<meta http-equiv=\"content-Type\" content=\"text/html;charset=x-sjis\">\r\n" + 
    "</head><body>\r\n" + 
    "<form method=\"POST\" action=\"/DSCT1000\">\r\n" + 
    "<b><font size=3>INPUT FORM<p>\r\n" + 
    "USERID<input type=\"text\" name=\"userId\" size=8 length=8 value=\"kkk\">\r\n" + 
    "PASSWORD<input type=\"text\" name=\"passwd\" size=8 length=8 value=\"000000\">\r\n" + 
    "</form>\r\n" + 
    "</body>\r\n" + 
    "</html>\r\n"; public static final Pattern KEYPT = Pattern.compile("\\svalue=\"\\w*\"",
    Pattern.UNICODE_CASE); public static void main(String[] args) throws IOException
    {
    Matcher m = KEYPT.matcher(str);
    while (m.find())
    {
    System.out.println(m.group());
    }
    }
    }
      

  2.   

    需求都不明确!是要取 input 的 type 为 text 的 value 还是所有有 value 属性的东西都要取出来?
      

  3.   

    就是查找,“USERID<input type="text" name="userId" size=8 length=8 value="kkk">
    里面value后面的值,上面那句话就是取得“kkk”
    拜托了。
      

  4.   

      支持!!~路过, 练习一把 
        function getAllValues(str){
            var reg = /<input[^>]*value="(\w+)/gm;
            var result = str.match(reg);
            return result;
        }   var str = 'USERID<input type="text" name="userId" size=8 length=8 value="kkk"><input value="gg">';
       alert(getAllValues(str));
        function getValueByName(str,paraname){
            var reg = new RegExp('<input[^>]*name="'+paraname+'[^>]*value="(\\w+)');
            var result = reg.exec(str);
            if(result)
               return result[1];
        }
        str = 'USERID<input type="text" name="userId" size=8 length=8 vale="kkk">';
        alert(getValueByName(str,'userId'));
      

  5.   

    谢谢你的回答,你的结果是:value="kkk"
     value="000000"
    我想要的结果是:kkk,000000
      

  6.   

    不要前台的,后台处理。
    这是我调用service后,返回的电文,我要把value后面的值取出来,更新到数据库里面。
    谢谢
      

  7.   

    这是我调用别的server后返回的电文,我要把value后面的每一个值取出来,然后更新到数据库里面。
      

  8.   

    不知道你的value中可不可能有中文,下面是支持有中文的写法:        String s = "<input type=\"text\" name=\"userId\" size=8 length=8 value=\"中文kkk\">";
            String zz = "value=\"([\u4e00-\u9fa5]*\\w*)\"\\s*";
            Pattern p1 = Pattern.compile(zz);
            Matcher m1 = p1.matcher(s);
            if (m1.find()) {
                System.out.println(m1.group(1));
            } else {
                System.out.println("no match");
            }
      

  9.   


    不用这么麻烦
    var inputs = document.getElementsByTagName("input");// 获取到 input 开头的元素
    // 然后迭代 inputs 将 inputs.values 保存到你想保存的地方就行了
      

  10.   

    谢谢你的回答。
    我的不止有一个input,我的返回电文有多个这样的,你的只能解析出一个
      

  11.   


    // 过来抢分了:)
    package test;import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;/**
     * @author - yy
     * @time   - Dec 10, 2008 2:53:01 PM
     */
    public class Test7 {
      /**
       * 将html中的所有value="xyz"或者value='xyz'中xyz提取出来,value=xyz的未完成
       * @param html
       * @return
       */
      public String[] getValues(String html) {
        final Pattern pattern = Pattern.compile("\\svalue=(['\"])(.*?)\\1", Pattern.MULTILINE);
        Matcher m = pattern.matcher(html);
        List<String> list = new ArrayList<String>();
        while (m.find()) {
          list.add(m.group(2));
        }
        return list.toArray(new String[0]);
      }
      
      public static void main(String[] args) throws IOException {
        String str = "<html>\r\n<head>\r\n<title>Direct e-SCOTT</title>\r\n"
                   + "<meta http-equiv=\"content-Type\" content=\"text/html;charset=x-sjis\">\r\n"
                   + "</head><body>\r\n<form method=\"POST\" action=\"/DSCT1000\">\r\n"
                   + "<b><font size=3>INPUT FORM<p>\r\n"
                   + "USERID<input type=\"text\" name=\"userId\" size=8 length=8 value=\"kkk\">\r\n"
                   + "PASSWORD<input type=\"text\" name=\"passwd\" size=8 length=8 value=\"000000\">\r\n"
                   + "</form>\r\n</body>\r\n</html>\r\n";
        String[] rs = new Test7().getValues(str);
        System.out.println(Arrays.deepToString(rs));
        // 输出[kkk, 000000]
      }
    }
      

  12.   

    google了下  看懂了 
      

  13.   


    哎,如果页面上有 <input type="submit" value="OK"> 难道这里面的 OK 也要取出来么?第二次问一下:
    是否只是取 input 中 type 为 text 的 value 值,还是看到有 value 这个属性的都取出来?
      

  14.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {    public static void main(String[] args) {
            String str = "<html>\n" +
                    "<head>\n" +
                    "<title>Direct e-SCOTT</title>\n" +
                    "<meta http-equiv=\"content-Type\" content=\"text/html;charset=x-sjis\">\n" +
                    "</head><body>\n" +
                    "<form method=\"POST\" action=\"/DSCT1000\">\n" +
                    "<b><font size=3>INPUT FORM<p>\n" +
                    
                    "USERID   <input type=\"text\" name=\"userId\" size=8 length=8 value=\"kkk1\">\n" +
                    "PASSWORD <input type=\"text\" name=\"passwd\" size=8 length=8 value=\"000001\">\n" +
                    
                    "USERID   <input type=\"text\" name='userId' size=8 length=8 value='kkk2'>\n" +
                    "PASSWORD <input type=\"text\" name='passwd' size=8 length=8 value='000002'>\n" +
                    
                    "USERID   <input type=\"text\" name=userId size=8 length=8 value=kkk3>\n" +
                    "PASSWORD <input type=\"text\" name=passwd size=8 length=8 value=000003>\n" +
                    
                    "USERID   <input type=\"text\" name=\"userId\" size=8 value=\"kkk21\" length=8>\n" +
                    "PASSWORD <input type=\"text\" name=\"passwd\" size=8 value=\"000021\" length=8>\n" +
                    
                    "USERID   <input type=\"text\" name='userId' size=8 value='kkk22' length=8>\n" +
                    "PASSWORD <input type=\"text\" name='passwd' size=8 value='000022' length=8>\n" +
                    
                    "USERID   <input type=\"text\" name=userId size=8 value=kkk23 length=8>\n" +
                    "PASSWORD <input type=\"text\" name=passwd size=8 value=000023 length=8>\n" +
                    
                    "         <input type=\"submit\" name=passwd size=8 value=\"提交\" length=8>\n" +
                    "         <input type=\"reset\" name=passwd size=8 value=\"重置\" length=8>\n" +
                    
                    "</form>\n" +
                    "</body>\n" +
                    "</html>";
            // 如果仅需要 input type="text" 中的 value 的话使用这个
            String regex = "<input[^>]+type\\s*=\\s*([\"']?)text\\1[^>]+value\\s*=\\s*([\"']?)([^\"'>\\s]+)\\2";
            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
            while(matcher.find()) {
                System.out.println(matcher.group(3));
            }
            System.out.println("--------------------");
            // 如果仅需要所有 input 中的 value 的话使用这个
            String regex2 = "<input[^>]+value\\s*=\\s*([\"']?)([^\"'>\\s]+)\\1";
            Pattern pattern2 = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE);
            Matcher matcher2 = pattern2.matcher(str);
            while(matcher2.find()) {
                System.out.println(matcher2.group(2));
            }       
        }
    }