拿什么拯救你贪婪的正则表达式...

macrotea-cn 2009-10-22 12:52:24
原谅我的标题。

开门见山:


String pTagA ="\\<img.*\\>.*\\<\\/img\\>";
Pattern tagAPattern = Pattern.compile(pTagA);
Matcher tagAMatcher = tagAPattern.matcher(content);


当用以上的代码去匹配:
String strTags="排头兵--<img href='#' id='new'>超级链接</img>---两个标签的中间内容---<img href='#'>删除</img>后来居上,哈哈";

返回的是:
<img href='#' id='new'>超级链接</img>---两个标签的中间内容---<img href='#'>删除</img>


连中间的内容也返回了。我想单独返回一对 img标记。

请高手指点,各路英雄磨枪上阵。
希望你们能把贪婪变成胁迫,谢谢。
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 amdgaming 的回复:]
Java code
[^>]
这个又是什么意思啊?

[/Quote]

表示除了 > 之外所有的字符


[Quote=引用 12 楼 myxiao7 的回复:]
哈哈,这帖子讨论的比较激烈,我想问一下,多行模式大概的用途,请高手举例子 。
(火龙果@菜菜宝宝)  那徽章很厉害。
[/Quote]

非多行模式情况下 ^ 和 $ 仅表示输入字符串的开头和结尾,多行模式下 ^ 和 $ 分别表示输入字符串每一行的行首和行尾。比如说,我们要在每行的前面加两个全角空格:

public class Test {

public static void main(String[] args) {
String str = "第一段\n第二段\n第三段";
str = str.replaceAll("(?m)^", "##");
System.out.println(str);
}
}
wcwtitxu 2009-10-22
  • 打赏
  • 举报
回复
开启单行模式: . 可以匹配任意字符(包括换行符)
关闭单行模式: . 只有匹配 非换行 的其它任意字符

-----------------------------------------

开启多行模式: ^ 可以匹配字符串开头,也可以匹配行的开头
        $ 可以匹配字符串结尾, 也可以匹配行的结尾
关闭多行模式: ^ 只能匹配字符串开头
        $ 只能匹配字符串结尾

-----------------------------------------

多行模式和单行模式,虽然名字上看,像是对立的。 但实际上不是,单行模式与多行模式互不影响
匹配时,可以既是单行模式也是多行模式
也可以 及既不是单行模式也不是多行模式

-----------------------------------------

多行模式 影响 ^ 和 $ 的匹配
单行模式 影响 . 的匹配
macrotea-cn 2009-10-22
  • 打赏
  • 举报
回复
哈哈,这帖子讨论的比较激烈,我想问一下,多行模式大概的用途,请高手举例子 。
(火龙果@菜菜宝宝) 那徽章很厉害。
brz97 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhuzeitou 的回复:]
引用 9 楼 amdgaming 的回复:
Java code
[^>]
这个又是什么意思啊?



这个就是不是>………………
[/Quote]

这是是"非<....."
zhuzeitou 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 amdgaming 的回复:]
Java code
[^>]
这个又是什么意思啊?

[/Quote]

这个就是不是>………………
amdgaming 2009-10-22
  • 打赏
  • 举报
回复

[^>]

这个又是什么意思啊?
yuexiashi 2009-10-22
  • 打赏
  • 举报
回复
ding
config_man 2009-10-22
  • 打赏
  • 举报
回复
在这里只要提到正则表达式的问题,火龙果一般都会来看看帖子,并且留下真知灼见。
wcwtitxu 2009-10-22
  • 打赏
  • 举报
回复
(?i) 模式修改符, 修改为启用 忽略大小写 模式


类似的有

(?s) 单行模式 (?m) 多行模式 等

也可以写在一起 (?is)
macrotea-cn 2009-10-22
  • 打赏
  • 举报
回复
学之未深,甚谢前人教导,临帖涕零。
amdgaming 2009-10-22
  • 打赏
  • 举报
回复
?i这个 怎么理解?楼上的。

[Quote=引用 2 楼 bao110908 的回复:]
你这个表达式写得就有问题!

Java codeimport java.util.regex.Matcher;import java.util.regex.Pattern;publicclass Test {publicstaticvoid main(String[] args) {
String str="排头兵--<img href='#' id='new'>超级链接</IMG>---两个标签的中间内容---<img href='#'>删除</img>后来居上,哈哈";
Pattern p= Pattern.compile("(?i)<img +[^>]+>.*?</img>");
Matcher m= p.matcher(str);while(m.find()) {
System.out.println(m.group());
}
}
}

[/Quote]
wcwtitxu 2009-10-22
  • 打赏
  • 举报
回复
Pattern.compile("(?i)<img\\b[^>]*>.*?</img>");
  • 打赏
  • 举报
回复
你这个表达式写得就有问题!

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) {
String str = "排头兵--<img href='#' id='new'>超级链接</IMG>---两个标签的中间内容---<img href='#'>删除</img>后来居上,哈哈";
Pattern p = Pattern.compile("(?i)<img +[^>]+>.*?</img>");
Matcher m = p.matcher(str);
while(m.find()) {
System.out.println(m.group());
}
}
}

lz12366 2009-10-22
  • 打赏
  • 举报
回复
顶下。。。。。。。。。。

62,614

社区成员

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

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