论坛首页 Java版

提问:java的正则表达式

浏览 3595 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2005-07-28
最近在学习正则表达式,做文件的解释.

我的文件是jsp文件
[code:1]...(任何字符,包括特殊字符)

<%
/**(任何字符,包括特殊字符)
..(任何字符,包括特殊字符)
...(任何字符,包括特殊字符)*/
%>

...(任何字符,包括特殊字符)[/code:1]

我想取得/**到*/里的字符,不知道这个正则怎么写呢? 谢谢

还有

[code:1]<img ..(其它属性) src(可以有任意空格)=(可以有任意空格或者一个双引号或者一个单引号)url(可以有任意空格或者一个双引号或者一个单引号) ..(其它属性)>[/code:1]


我现在想取得url这个字符串,不知道怎么写正则呢...

多谢...
   
最后更新时间:2005-07-28
我现在写了点,基本解决了第一个问题,但有点恶心,嘻

表达式:

.*/\\*(.*\\s*)*

获得了/**后面所有的东西.

然后再用String.replaceAll()把其它的东西替换掉为空,就行了

代码如下:
[code:1]
        Pattern p=Pattern.compile(".*/\\*(.*\\s*)*",Pattern.CASE_INSENSITIVE);
       //Pattern.CASE_INSENSITIVE 忽略大小
        Matcher m=p.matcher(content);
       //content是所有的文件的内容,我是一次性把文件读出来了
       
        while(m.find()){
          System.out.println(m.group().replaceAll("(?<=\\*/)(.*\\s*)*","").replaceAll(">\n",">"));
//(?<=\\*/)是指当条件,但不包括这一段(不会被替换掉)
        }[/code:1]

正确答在下,嘻嘻(我写的这个真垃圾)
   
0 请登录后投票
最后更新时间:2005-07-28
查找 /* ... */的:
Pattern p = Pattern.compile(".*/\\*+.*\\*/.*$", Pattern.MULTILINE);
这个是偶以前写的,不过现在居然看不懂了
ps:好像还写错了,/**/ 中多行就搜不到了。
   
0 请登录后投票
最后更新时间:2005-07-28
wolfsquare 写道
查找 /* ... */的:
Pattern p = Pattern.compile(".*/\\*+.*\\*/.*$", Pattern.MULTILINE);
这个是偶以前写的,不过现在居然看不懂了
ps:好像还写错了,/**/ 中多行就搜不到了。


嗯,我那个是可以搜多行的,因为.是不包括换行符的.

不过还是不太了解正则表达式.

关于问题2的解决:

<(\\s)*IMG(\\s)+.*(\\s)*>

然后用String.replaceAll()代替掉

replaceAll(".*(\\s)*(SRC|src)(\\s)*=(\\s)*\"","").replaceAll("\".*","")

不过,我还是不了解怎么在字符串中忽略大小写,这个表达式就不能替换掉SrC这种的,唉..
   
0 请登录后投票
最后更新时间:2005-07-28
http://61.186.252.131/Expert/topic/1882/1882112.xml?temp=9.836978E-02
   
0 请登录后投票
最后更新时间:2005-07-28
谢谢,强呀....呵呵

第一个问题,完全解决,谢谢了

pattern = Pattern.compile("[.[^\\n]]*(/\\*(.|[^\\*]*(\\*[^/][^\\*]*)*)\\*/)[.[^\\n]]*",Pattern.DOTALL);

做一次解释吧(看得似懂非懂呀):
[code:1]
[.[^\\n]]*
           . 是指任意字符(但不包括换行符)
           [^\\n]非换行符, [^]是指否
##
整行的意思就是: 不带换行的任意字符

(/\\*(.|[^\\*]*(\\*[^/][^\\*]*)*)\\*/)
          /\\*比较简单,就是/*的意思(因为*号在正则表达式中有其它的含义,所以必须要转义,  \\是指单斜杠(\),因为在java中\是有其它意义

         (.|[^\\*]*(\\*[^/][^\\*]*)*)
                     . 是指任字符
                     | 是或者的意思
                     [^\\*]* 任意的非*字符

                     (\\*[^/][^\\*]*)                                
                                 \\*[^/] : \\*就是*号,[^/]就是指非/字符,所以就是指*后面不能有/的字符
                                  [^\\*]*  任意的非*字符
                    ##
                    整行的意思:带有*的行中,不能在*的后面有/*的字符存在

                  \\*/就是*/
        ##
        整行的意思:任意非星的字符,或者有星,但不能在*的后面有/*的星行[/code:1]

后面我就不解释了..(也是有点了解而罢了,如果解释错误了,希望指正)
ps,怎么这个code标签会有中文问题呀?
   
0 请登录后投票
最后更新时间:2005-07-28
Pattern pattern = Pattern.compile("/\\*.*\\*/(?!\\*)",Pattern.DOTALL);
Matcher matcher = pattern.matcher(abc);

while(matcher.find())
{
     matcher.start();
     matcher.end();
}
\\*/(?!\\*),表示必须匹配*/但不包括*/*.
matcher.end(),表示模式串在匹配串中的位置.
   
0 请登录后投票
最后更新时间:2005-07-29
nihongye 写道
Pattern pattern = Pattern.compile("/\\*.*\\*/(?!\\*)",Pattern.DOTALL);
Matcher matcher = pattern.matcher(abc);

while(matcher.find())
{
     matcher.start();
     matcher.end();
}
\\*/(?!\\*),表示必须匹配*/但不包括*/*.
matcher.end(),表示模式串在匹配串中的位置.


精典.呵呵.

我也找到了,replace中能忽略大小写的了就是(?i)就可以了.

例如:

[code:1]String str="AAAAaaaaa";

System.out.println(str.replaceAll("(?i)a","b");[/code:1]
   
0 请登录后投票
最后更新时间:2005-07-29
[code:1]<img ..(其它属性) src(可以有任意空格)=(可以有任意空格或者一个双引号或者一个单引号)url(可以有任意空格或者一个双引号或者一个单引号) ..(其它属性)>[/code:1]


我现在想取得url这个字符串,不知道怎么写正则呢...
   
0 请登录后投票
最后更新时间:2005-07-30
nihongye 写道

while(matcher.find())
{
     matcher.start();
     matcher.end();
}

这样该怎么获取start和end中间的字串?
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐