Java中的正则匹配

想用Java解析Html里面的标签,例如我要解析html里面的 <link rel="openid.server" href="http://www.xxxxxx.com" />。可以使用 javax.swing.text.html.parser 或者org.htmlparser 或者 javax.xml.parsers.SAXParser。不过,要求Html必须是一个规范的XML格式,而网页基本上都不符合。

所以采用正则匹配来解决。
import ...
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public final class HttpTookit {
private static Log log = LogFactory.getLog(HttpTookit.class);

public static String doGet(String url, String queryString) {
...
return response;
}

public static void main(String[] args) {
String x = doGet("http://www.xxxxx.com", "");
System.out.println(x);
Pattern p = Pattern.compile(".* href=\"(.*)\" />.*");
Matcher m = p.matcher(x);
//m.matches(); 不知道为什么这里匹配不到
if (m.find()) {
System.out.println("m.group():" + m.group(1));
}

}
}


matcher.find() 和 matcher.matches()的区别:matches是将整个输入串与模式匹配,find是查找输入串中与模式匹配的子串。[b]但是为什么m.matches()在这里匹配不到呢?[/b]
### Java 正则表达式匹配校验 #### 使用正则表达式进行字符串开头匹配 为了确保字符串以特定模式开始,在Java中可以通过`Pattern`和`Matcher`类来实现。例如,如果要验证一个字符串是否以指定前缀开始,则可以构建如下形式的正则表达式: ```java String regex = "^prefix"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("prefix example"); boolean matches = matcher.find(); ``` 此代码片段展示了如何定义一个简单的正则表达式来检测给定字符串是否以前缀"prefix"开头[^1]。 #### 封装工具类提高开发效率 考虑到实际项目中的复杂性和重复性工作,创建专门针对正则表达式的辅助函数或工具类是非常有益的做法。这类工具通常会包含多个静态方法,以便更方便地执行常见的正则运算任务,比如验证输入数据的有效性、提取子串等操作。下面给出了一种可能的设计方案——名为`RegexUtils`的实用程序类的一部分: ```java public class RegexUtils { public static final String IP_PORT_REGEX = "^(\\d{1,3}\\.){3}\\d{1,3}:(\\d+)$"; /** * 验证传入的内容是否符合IP地址加端口号的形式. */ public static boolean isValidIpWithPort(String input){ return input.matches(IP_PORT_REGEX); } } ``` 上述例子说明了怎样利用预编译好的正则模板来进行快速有效的格式检验[^2][^4]. #### 实现自定义规则下的字符串匹配 当面对更加灵活的需求时,如允许一定程度上的不确定性存在的情况下寻找相似项,就需要设计更为复杂的逻辑结构。这里展示了一个简单的方法用来判断源字符串能否按照提供的正则条件被接受: ```java /** * 判断source string 是否满足regex 规则 */ public static boolean stringMatchRule(String source, String regex) { if (null == source || null == regex) { throw new IllegalArgumentException("Arguments cannot be null."); } return source.matches(regex); } ``` 这段代码实现了基本的字符串与正则表达式的对比过程,并返回布尔值表示两者之间是否存在匹配关系[^3]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值