|
锁定老贴子 主题:提问:java的正则表达式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2005-07-28
最近在学习正则表达式,做文件的解释.
我的文件是jsp文件 [code:1]...(任何字符,包括特殊字符) <% /**(任何字符,包括特殊字符) ..(任何字符,包括特殊字符) ...(任何字符,包括特殊字符)*/ %> ...(任何字符,包括特殊字符)[/code:1] 我想取得/**到*/里的字符,不知道这个正则怎么写呢? 谢谢 还有 [code:1]<img ..(其它属性) src(可以有任意空格)=(可以有任意空格或者一个双引号或者一个单引号)url(可以有任意空格或者一个双引号或者一个单引号) ..(其它属性)>[/code:1] 我现在想取得url这个字符串,不知道怎么写正则呢... 多谢... 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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] 正确答在下,嘻嘻(我写的这个真垃圾) |
|
| 返回顶楼 | |
|
最后更新时间:2005-07-28
查找 /* ... */的:
Pattern p = Pattern.compile(".*/\\*+.*\\*/.*$", Pattern.MULTILINE); 这个是偶以前写的,不过现在居然看不懂了 ps:好像还写错了,/**/ 中多行就搜不到了。 |
|
| 返回顶楼 | |
|
最后更新时间: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这种的,唉.. |
|
| 返回顶楼 | |
|
最后更新时间:2005-07-28
|
|
| 返回顶楼 | |
|
最后更新时间:2005-07-28
谢谢,强呀....呵呵
第一个问题,完全解决,谢谢了 pattern = Pattern.compile("[.[^\\n]]*(/\\*(.|[^\\*]*(\\*[^/][^\\*]*)*)\\*/)[.[^\\n]]*",Pattern.DOTALL); 做一次解释吧(看得似懂非懂呀): [code:1] [.[^\\n]]* . 是指任意字符(但不包括换行符) [^\\n]非换行符, [^]是指否 ## 整行的意思就是: 不带换行的任意字符 (/\\*(.|[^\\*]*(\\*[^/][^\\*]*)*)\\*/) /\\*比较简单,就是/*的意思(因为*号在正则表达式中有其它的含义,所以必须要转义, \\是指单斜杠(\),因为在java中\是有其它意义 (.|[^\\*]*(\\*[^/][^\\*]*)*) . 是指任字符 | 是或者的意思 [^\\*]* 任意的非*字符 (\\*[^/][^\\*]*) \\*[^/] : \\*就是*号,[^/]就是指非/字符,所以就是指*后面不能有/的字符 [^\\*]* 任意的非*字符 ## 整行的意思:带有*的行中,不能在*的后面有/*的字符存在 \\*/就是*/ ## 整行的意思:任意非星的字符,或者有星,但不能在*的后面有/*的星行[/code:1] 后面我就不解释了..(也是有点了解而罢了,如果解释错误了,希望指正) ps,怎么这个code标签会有中文问题呀? |
|
| 返回顶楼 | |
|
最后更新时间:2005-07-28
Pattern pattern = Pattern.compile("/\\*.*\\*/(?!\\*)",Pattern.DOTALL);
Matcher matcher = pattern.matcher(abc); while(matcher.find()) { matcher.start(); matcher.end(); } \\*/(?!\\*),表示必须匹配*/但不包括*/*. matcher.end(),表示模式串在匹配串中的位置. |
|
| 返回顶楼 | |
|
最后更新时间: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] |
|
| 返回顶楼 | |
|
最后更新时间:2005-07-29
[code:1]<img ..(其它属性) src(可以有任意空格)=(可以有任意空格或者一个双引号或者一个单引号)url(可以有任意空格或者一个双引号或者一个单引号) ..(其它属性)>[/code:1]
我现在想取得url这个字符串,不知道怎么写正则呢... |
|
| 返回顶楼 | |
|
最后更新时间:2005-07-30
nihongye 写道 while(matcher.find()) { matcher.start(); matcher.end(); } 这样该怎么获取start和end中间的字串? |
|
| 返回顶楼 | |







