一个正则表达式的问题。。。。。。。。。。。。。。。。。。。。。。。。。
方法:
private String replace (String content, String pattern, String replace)
{
try
{
pattern1 = patterCom.compile(pattern, Perl5Compiler.CASE_INSENSITIVE_MASK); //后面参数,创建大小写不敏感的模式
content = Util.substitute(matcher,
pattern1,
new Perl5Substitution(replace, Perl5Substitution.INTERPOLATE_ALL),
content, Util.SUBSTITUTE_ALL);
}
catch (Exception e)
{
e.printStackTrace();
}
return content;
}
调用测试:
String str = replace(inputStr, "\\[IMG\\](.+)\\[/IMG\\]", "<img src=\"$1\">");
如果 inputStr = "[IMG]imagesrc.jpg[/IMG]";
则正常
如果 inputStr = "[IMG]imagesrc.jpg[/IMG][IMG]imagesrc.jpg[/IMG]";
就成了 <img src="imagesrc.jpg[/IMG][IMG]imagesrc.jpg");
即,拿第一段[IMG]与最后一段[/IMG] 匹配去了
问一下,怎样改决
问题点数:20、回复次数:19Top
1 楼laoxing521(想做程序员的农民)回复于 2005-05-23 17:16:56 得分 0
晕
连顶都没得个人来顶一下Top
2 楼neulx(aha)回复于 2005-05-24 10:09:40 得分 2
我帮你Top
3 楼laoxing521(想做程序员的农民)回复于 2005-05-24 13:01:59 得分 0
再顶.........Top
4 楼sy_315(apollo)回复于 2005-05-24 13:26:08 得分 2
......
编译原理学过正则式。
Top
5 楼ariel_521(Ariel)回复于 2005-05-25 10:41:42 得分 2
嘿嘿嘿,这分俺拣了
不知道你这程序段的上下都是什么,所以给你一段程序参考一下:
对了,得是SDK 1.5 下调试
import java.util.*;
public class Example
{
public static void main(String args[ ])
{
String s="we are stud,ents";
StringTokenizer fenxi=new StringTokenizer(s," ,"); //空格和逗号做分
int number=fenxi.countTokens();
while(fenxi.hasMoreTokens())
{
String str=fenxi.nextToken();
System.out.println(str);
System.out.println("还剩"+fenxi.countTokens()+"个单词");
}
System.out.println("s共有单词:"+number+"个");
}
}
Top
6 楼ariel_521(Ariel)回复于 2005-05-25 10:43:45 得分 1
我正做毕业设计呢,是一个过滤浏览器,做的是不是和你差不多啊?
我的信箱:ariel_521@hotmail.comTop
7 楼ariel_521(Ariel)回复于 2005-05-25 10:58:16 得分 1
http://www.netbei.com/Article/jsp/jsp3/200407/44.htmlTop
8 楼laoxing521(想做程序员的农民)回复于 2005-05-25 12:41:37 得分 0
回 ariel_521(Ariel)
与UBB差不多的东东吧
其实我一开始也就是你说的这么做的,用StringTokenizer,分割,截子串,再分析,填充,
后来,又觉得太烦琐了,就改为用正则表达式
Top
9 楼ariel_521(Ariel)回复于 2005-05-25 13:23:11 得分 1
呀,刚才的例子错了
应该是这个
import java.util.regex.*;
class Example
{
public static void main(String args[ ])
{
Pattern p; //模式对象。
Matcher m; //匹配对象。
String s1="0A1A2A3A4A5A6A7A8A9"; //待匹配的字符序列。
p=Pattern.compile("\\dA\\d"); //用模式"\\dA\\d"初试化模式对象。
m=p.matcher(s1); //用待匹配字符序列初始化匹配对象。
while(m.find())
{
String str=m.group();
System.out.print("从"+m.start()+"到"+m.end()+"匹配模式子序列:");
System.out.println(str);
}
String temp=m.replaceAll("***");
System.out.println(temp);
System.out.println(s1);
m=p.matcher("9A00A3"); //重新初始化匹配对象。
if(m.matches())
{
String str=m.group();
System.out.println(str);
}
else
{
System.out.println("不完全匹配");
}
if(m.lookingAt())
{
String str=m.group();
System.out.println(str);
}
}
}Top
10 楼ariel_521(Ariel)回复于 2005-05-25 13:26:02 得分 1
真是的,我早就想给你重发了,可是斑竹不让有连续4个以上的帖子,所以只好等你发个话我才能重新发。郁闷死我了~~~~~~~~~~~~~Top
11 楼laoxing521(想做程序员的农民)回复于 2005-05-25 13:39:44 得分 0
兄弟呀
假设我输入 :>> [url]http://url[/url]
输出<<== <a href="http://url"/>
输入: [url]http://111[/url]www[url]http://222[/url][url]http://333[/url]
输出: <a href="http://111"/>www<a href="http://222"/><a href="http://333"/>
这就是我要的结果
可用正则一配,就成了:<a href="http://111[/url]www[url]http://222[/url][url]http://333"/>
我现在想到一个办
也就是在写正则表的写法 在 \\[url\\](.+)\\[/url\\] 中间,不能含有\\[url\\](.+)\\[/url\\]才匹配,可是这个正则,不晓得是何时写
Top
12 楼laoxing521(想做程序员的农民)回复于 2005-05-25 14:09:49 得分 0
搞定
正则表达式: \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]
Top
13 楼ariel_521(Ariel)回复于 2005-05-25 14:13:01 得分 1
你运行我第二次写的程序了么?
运行结果是
从0到3匹配模式子序列: 0A1
从4到7匹配模式子序列: 2A3
从8到11匹配模式子序列: 4A5
从12到15匹配模式子序列: 6A7
从16到19匹配模式子序列: 8A9
***A***A***A***A***
0A1A2A3A4A5A6A7A8A9
不完全匹配
9A0Top
14 楼ariel_521(Ariel)回复于 2005-05-25 14:16:50 得分 2
正则表达式: \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]
你用这个配出来的结果是什么啊?Top
15 楼laoxing521(想做程序员的农民)回复于 2005-05-25 17:29:25 得分 0
还是不行了
ariel_521(Ariel) 看了一下你第二段代码
对我的用处不大,我的标签是成对的,不过,还是感谢你
\[IMG\]([^\[IMG\]]+)\[/IMG\]
就是匹配[IMG]和[/IMG]中间不含 [IMG]的段
唉
我又弄错了,认为 [^\[IMG\]]是说不能出现 "[IMG]",可实际上,是不能出现 '[' or 'I' or,'M',or 'G' or ']'
而非限制"[IMG]"的连续出现
现在想法办法,限[IMG]不能连续出现,问题就真的解决了
这个正则真TMD的难写,Top
16 楼ariel_521(Ariel)回复于 2005-05-25 17:47:29 得分 2
Pattern pattern;
Matcher match;
pattern=Pattern.compile("<a HREF=http://.*>*.待检索字段.*</a>",Pattern.CASE_INSENSITIVE);
match=pattern.matcher(str);
while(match.find())
{
}
怎么说呢,我是想让你注意这个方法。match.find() 是说“如果下面有就继续找出来”
这点时间我也学到了很多东西
你看看这么配行不行?
pattern=Pattern.compile("[IMG].*[/IMG]",Pattern.CASE_INSENSITIVE);
"[IMG]imagesrc.jpg[/IMG]";Top
17 楼ariel_521(Ariel)回复于 2005-05-25 17:48:54 得分 1
上一帖子的最后 1 行去掉Top
18 楼thomas_20(执子之手,与子偕老)回复于 2005-05-27 11:31:08 得分 2
试试这个吧!(懒式匹配):
Pattern pattern;
Matcher match;
pattern = Pattern.compile("\\[IMG\\].*?\\[/IMG\\]");
match = pattern.matcher("[IMG]imagesrc.jpg[/IMG][IMG]imagesrc.jpg[/IMG]");
while (match.find()) {
System.out.println(match.group());
}Top
19 楼Goldrush(上天有好生之德)回复于 2005-05-28 15:25:27 得分 2
dingTop




