求一正则表达式

ouyangxiaokang6 2008-12-10 11:54:30

<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后面的值取出。越简洁越好,因为有很多这样的值。本人正则不懂,先谢谢了。
...全文
229 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyangxiaokang6 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 bao110908 的回复:]
Java codeimport 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" +

[/Quote]
谢谢果子的回答,我可能没说清楚,我这是个返回的电文,不是实际的画面。不过你的方法可以解决了。谢谢。
  • 打赏
  • 举报
回复
如果问正则表达式的话,请在提问时满足下面的要求:

1,正则表达式是一种模式匹配,是根据字符串的规律来操作的,因此需要详细说明具体要做些什么;
2,对于查找的问题,详细说明寻找字符串的特征是什么,这些字符串的边界是什么,或者说有些什么规律;
3,对于替换的问题,详细说明原串是什么,替换后是什么,有些什么规律;
4,对于验证的问题,详细说明验证的格式是什么;
5,举两三个覆盖范围尽可能广的示例。需要注意的是,正则表达式仅仅能满足所提供的示例
lihan6415151528 2008-12-10
  • 打赏
  • 举报
回复
嘿嘿 路过 抢分
  • 打赏
  • 举报
回复
需求都不明确!

是要取 input 的 type 为 text 的 value 还是所有有 value 属性的东西都要取出来?
deepho 2008-12-10
  • 打赏
  • 举报
回复


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());
}
}
}

胡须棉花糖 2008-12-10
  • 打赏
  • 举报
回复
up
fuyou001 2008-12-10
  • 打赏
  • 举报
回复
牛人真多啊
nanhaipm 2008-12-10
  • 打赏
  • 举报
回复
17楼强,拿下来慢慢看。
  • 打赏
  • 举报
回复
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));
}
}
}
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ouyangxiaokang6 的回复:]
引用 3 楼 bao110908 的回复:
需求都不明确!

是要取 input 的 type 为 text 的 value 还是所有有 value 属性的东西都要取出来?

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

哎,如果页面上有 <input type="submit" value="OK"> 难道这里面的 OK 也要取出来么?

第二次问一下:
是否只是取 input 中 type 为 text 的 value 值,还是看到有 value 这个属性的都取出来?
ouyangxiaokang6 2008-12-10
  • 打赏
  • 举报
回复
up
时光瞄 2008-12-10
  • 打赏
  • 举报
回复
\\1是反向引用的意思?和前一个(['\\"])对称
时光瞄 2008-12-10
  • 打赏
  • 举报
回复
17楼的解决方案不错...
phoenixLotus 2008-12-10
  • 打赏
  • 举报
回复
google了下 看懂了
deepho 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ouyangxiaokang6 的回复:]
引用 2 楼 deepho 的回复:
Java code

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 FO…

谢谢你的回答,你的结果是:value="kkk"
v…
[/Quote]


疯了,这你都懒得解析一下么?!
残念~~~
ouyangxiaokang6 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yywl62 的回复:]
Java code
// 过来抢分了:)
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的未完成
* …
[/Quote]

这个可以,还有没有更间接的方法了呢。
phoenixLotus 2008-12-10
  • 打赏
  • 举报
回复
麻烦问哈17楼 后面加个1什么意思呢 不解 多谢!
cangyue87 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ouyangxiaokang6 的回复:]
谢谢你的回答,你的结果是:value="kkk"
value="000000"
我想要的结果是:kkk,000000
[/Quote]
剩下的楼主就自己写了吧喵~~`
kevin-yy 2008-12-10
  • 打赏
  • 举报
回复

// 过来抢分了:)
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]
}
}
ouyangxiaokang6 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ganglong99 的回复:]
不知道你的value中可不可能有中文,下面是支持有中文的写法:

Java code
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 {

[/Quote]
谢谢你的回答。
我的不止有一个input,我的返回电文有多个这样的,你的只能解析出一个
加载更多回复(10)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧