一个正则表达式的问题。。。。。。。。。。。。。。。。。。。。。。。。。

laoxing521 2005-05-23 01:34:58
方法:
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] 匹配去了
问一下,怎样改决
...全文
160 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Goldrush 2005-05-28
  • 打赏
  • 举报
回复
ding
thomas_20 2005-05-27
  • 打赏
  • 举报
回复
试试这个吧!(懒式匹配):

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());
}
laoxing521 2005-05-25
  • 打赏
  • 举报
回复
回 ariel_521(Ariel)

与UBB差不多的东东吧

其实我一开始也就是你说的这么做的,用StringTokenizer,分割,截子串,再分析,填充,
后来,又觉得太烦琐了,就改为用正则表达式
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
http://www.netbei.com/Article/jsp/jsp3/200407/44.html
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
我正做毕业设计呢,是一个过滤浏览器,做的是不是和你差不多啊?
我的信箱:ariel_521@hotmail.com
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
嘿嘿嘿,这分俺拣了
不知道你这程序段的上下都是什么,所以给你一段程序参考一下:
对了,得是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+"个");
}
}

ariel_521 2005-05-25
  • 打赏
  • 举报
回复
上一帖子的最后 1 行去掉
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
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]";
laoxing521 2005-05-25
  • 打赏
  • 举报
回复
还是不行了

ariel_521(Ariel) 看了一下你第二段代码
对我的用处不大,我的标签是成对的,不过,还是感谢你

\[IMG\]([^\[IMG\]]+)\[/IMG\]
就是匹配[IMG]和[/IMG]中间不含 [IMG]的段


我又弄错了,认为 [^\[IMG\]]是说不能出现 "[IMG]",可实际上,是不能出现 '[' or 'I' or,'M',or 'G' or ']'
而非限制"[IMG]"的连续出现
现在想法办法,限[IMG]不能连续出现,问题就真的解决了
这个正则真TMD的难写,
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
正则表达式: \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]
你用这个配出来的结果是什么啊?
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
你运行我第二次写的程序了么?
运行结果是
从0到3匹配模式子序列: 0A1
从4到7匹配模式子序列: 2A3
从8到11匹配模式子序列: 4A5
从12到15匹配模式子序列: 6A7
从16到19匹配模式子序列: 8A9
***A***A***A***A***
0A1A2A3A4A5A6A7A8A9
不完全匹配
9A0
laoxing521 2005-05-25
  • 打赏
  • 举报
回复
搞定
正则表达式: \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]
laoxing521 2005-05-25
  • 打赏
  • 举报
回复
兄弟呀

假设我输入 :>> http://url
输出<<== <a href="http://url"/>

输入:  http://111wwwhttp://222http://333
输出: <a href="http://111"/>www<a href="http://222"/><a href="http://333"/>

这就是我要的结果

可用正则一配,就成了:<a href="http://111[/url]wwwhttp://222[url]http://333"/>

我现在想到一个办
也就是在写正则表的写法 在 \\[url\\](.+)\\[/url\\] 中间,不能含有\\[url\\](.+)\\[/url\\]才匹配,可是这个正则,不晓得是何时写

ariel_521 2005-05-25
  • 打赏
  • 举报
回复
真是的,我早就想给你重发了,可是斑竹不让有连续4个以上的帖子,所以只好等你发个话我才能重新发。郁闷死我了~~~~~~~~~~~~~
ariel_521 2005-05-25
  • 打赏
  • 举报
回复
呀,刚才的例子错了
应该是这个
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);
}
}
}
neulx 2005-05-24
  • 打赏
  • 举报
回复
我帮你
sy_315 2005-05-24
  • 打赏
  • 举报
回复
......
编译原理学过正则式。
laoxing521 2005-05-24
  • 打赏
  • 举报
回复
再顶.........
laoxing521 2005-05-23
  • 打赏
  • 举报
回复


连顶都没得个人来顶一下

62,615

社区成员

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

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