`
dengyin2000
  • 浏览: 1209217 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个正则表达式的问题.

阅读更多
		
		String needToMatch = "<table><tr>fadsf</tr><tr>dafqewrdf</tr></table>";

		
		Pattern p = Pattern.compile("\\Q<tr>\\E.*\\Q</tr>\\E");
		Matcher matcher = p.matcher(needToMatch);
		while(matcher.find()){
            System.out.println("I found the text \"" + matcher.group() +
                    "\" starting at index " + matcher.start() +
                    " and ending at index " + matcher.end() + ".");
		}




得到的是
I found the text "<tr>fadsf</tr><tr>dafqewrdf</tr>" starting at index 7 and ending at index 39.

其实我想解析成<tr>fadsf</tr> 和 <tr>dafqewrdf</tr>

请问这个正则表达式该怎么写呢? thanks
分享到:
评论
13 楼 yfmine 2006-04-22  
学到了\Q\E,多谢.
推荐一本书:&lt;C#字符串和正则表达式参考手册&gt;
一个工具:The Regulator  http://regex.osherove.com/
12 楼 hongliang 2006-04-21  
明白叻。。。
11 楼 dengyin2000 2006-04-21  
引用
你在用greedy mode,用lazy mode就解决问题啦
jakarta ORO 的使用方法: &lt;tr&gt;.*?&lt;/tr&gt;
hoho,前两天刚看了
sams.teach.yourself.regular.expressions.in.10.minutes


下了这本书, 这个星期回家看看. 10分钟能看完么? 我英语好烂呀
10 楼 dengyin2000 2006-04-21  
引用
dengyin2000 写道:
hongliang 写道:

dengyin2000 写道:
引用:

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....


\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E

没感觉有啥作用。。。能详细解释一下吗?


String s = "abc*def*ghj";
试试System.out.println(s.split("*"));


怎么能这么写呢?应该是System.out.println(s.split("\\*"));吧
dengyin2000
文章时间: 2006-4-21 周五, 下午1:26    标题:
hongliang 写道:

dengyin2000 写道:
引用:

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....


\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E

没感觉有啥作用。。。能详细解释一下吗?


String s = "abc*def*ghj";
试试System.out.println(s.split("*"));


假如 s = "abc*.def*.ghj" 呢  你是不是要  s.split("\\*\\.")这样呢? 万一有更多的保留字符呢 ? 用\Q\E吧. s.split("\\Q*.\\E")
9 楼 hongliang 2006-04-21  
dengyin2000 写道
hongliang 写道

dengyin2000 写道:
引用:

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....


\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E

没感觉有啥作用。。。能详细解释一下吗?


String s = "abc*def*ghj";
试试System.out.println(s.split("*"));


怎么能这么写呢?应该是System.out.println(s.split("\\*"));吧
8 楼 dengyin2000 2006-04-21  
hongliang 写道

dengyin2000 写道:
引用:

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....


\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E

没感觉有啥作用。。。能详细解释一下吗?


String s = "abc*def*ghj";
试试System.out.println(s.split("*"));
7 楼 hongliang 2006-04-21  
dengyin2000 写道
引用

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....


\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E

没感觉有啥作用。。。能详细解释一下吗?
6 楼 yatwql 2006-04-21  
你在用greedy mode,用lazy mode就解决问题啦
jakarta ORO 的使用方法: &lt;tr&gt;.*?&lt;/tr&gt;
hoho,前两天刚看了
sams.teach.yourself.regular.expressions.in.10.minutes
5 楼 dengyin2000 2006-04-21  
引用

请教一下,那个\Q和\E有什么用?


避免context中有特殊意义的字符, * { () ....
4 楼 hongliang 2006-04-20  
推荐一个写正则的插件QuickRex:

http://prdownloads.sourceforge.net/easyeclipse/eclipseplugin-quickrex-2.0.0.tar.gz

请教一下,那个\Q和\E有什么用?
3 楼 dengyin2000 2006-04-20  
引用
java代码:


Pattern p = Pattern.compile("\\Q&lt;tr&gt;\\E.*?\\Q&lt;/tr&gt;\\E");



谢谢, 看了sun网站上的java tutorial的正则表达式这张. 对这节不是很清楚
http://java.sun.com/docs/books/tutorial/extra/regex/quant.html


Current REGEX is: .*foo  // greedy quantifier
Current INPUT is: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.

Current REGEX is: .*?foo  // reluctant quantifier
Current INPUT is: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.

Current REGEX is: .*+foo // possessive quantifier
Current INPUT is: xfooxxxxxxfoo
No match found.

茅塞顿开!
2 楼 scud 2006-04-20  
Pattern p = Pattern.compile("\\Q<tr>\\E.*?\\Q</tr>\\E");; 



其实还是jakarta 的oro模块好用,更符合perl的习惯

sun实现的正则表达式不伦不类的,当然还是能用的
1 楼 scud 2006-04-20  
又见贪婪

相关推荐

Global site tag (gtag.js) - Google Analytics