【发布时间】:2012-01-19 14:15:33
【问题描述】:
我处于严格的 Java 环境中。
所以这个问题并不像在tite中那么简单,我不是在尝试解决我遇到的问题,而是为了更好的知识而更具理论性。
我感兴趣的是用双引号或单引号匹配src,但如果是双引号,它也必须用双引号关闭,同样适用于单引号。
我知道我可以自己重复正则表达式,即:
String str = "src=\"hello/\" ... src='hello/' ..."
println str.replaceAll ("src=((\"[^\"]+\")|('[^']+'))", "src=$1")
我想做的是这样的:
println s.replaceAll ("src=([\"'][^\"']+[\"'])", "src=$1")
但是,如果它以双引号开头,则内容中应允许使用单引号,并且必须以双引号而不是单引号结尾。
问题2:
是否可以用找到的相同类型的报价替换所有? 是否可以说,对于这场比赛,用this2替换,对于那个,用that2替换。 如果不每次都生成一个新字符串,你怎么能做到这一点?
为 Alan More 编辑,例如问题二:
println "one ... two".replaceAll( "(one)", "1" ).replaceAll("(two)", "2");
更多地沿着这些路线(不正确)
println "one ... two".replaceMyMatches( "(one)[^\\w]+(two)", "\$1{1}, \$2{2}" ) // prints string : one{1}, two{2}
我想要的是字符串:1, 2
第一个问题的答案源自黑熊猫和杰夫沃克并稍作改动:
String str = "src=\"1.png\" ... src='2.jpeg' ... src=\"3.p'ng\" ... src='4.jpe\"g' ... src='' ... src=\"\" ..." ;
String regex = "src=(['\"])(.+?)\\1"; // closes with the quote that is in group 1
println str.replaceAll( regex, '''src=$1../new_path/$2$1''')
吐出:
src="../new_path/1.png" ... src='../new_path/2.jpeg' ... src="../new_path/3.p'ng" ... src='../new_path/4.jpe"g' ... src='' ... src="" ...
如果也想替换空的,只需将正则表达式中的 + 切换到星号(我不想要那个)
请注意原始引号也在其中。
回答问题二看黑熊猫
【问题讨论】:
-
第二个问题没看懂。有例子吗?
-
@AlanMoore 查看已编辑的问题