一点点RegEx帮助请 - 第2部分

时间:2011-05-16 21:01:45

标签: java regex

这是输入字符串:

loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', 'http://www.something.com/videos/JohnsAwesomeCaption.xml', '/videos/video-splash-image.gif')

使用此RegExp:(?< =')[^'] +。xml(?=')

......我们得到了这个:

http://www.something.com/videos/JohnsAwesomeCaption.xml

......这正是我想要的。但是这次我想为上面选择完整的字符串EXCEPT。基本上是反向选择。输出应如下所示:

loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', '', '/videos/video-splash-image.gif')

谢谢!

3 个答案:

答案 0 :(得分:5)

匹配你的模式,获得匹配的子字符串,然后用空字符串(或者'或者其他)替换那个确切的子字符串。如果您的语言可以选择返回匹配的索引而不是匹配它的文本,则更容易,因为您可以删除索引标识的文本范围。

某些语言提供了“regusb”(正则表达式替换)命令,该命令允许您将正则表达式替换为另一个字符串,这样您就可以在一个步骤中完成匹配和替换。不同的语言可以通过不同的名称调用该命令。

答案 1 :(得分:3)

如果您必须在Regex中执行任务,请尝试此操作:
取代

(.+)(?<=')[^']+\.xml(?=')(.+)

$1$2

答案 2 :(得分:2)

不确定您使用的是哪种语言,但您可以执行 Java

str = "loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', 'http://www.something.com/videos/JohnsAwesomeCaption.xml', '/videos/video-splash-image.gif')";
System.out.println(str.replaceFirst("(?<=')[^']+\\.xml(?=')", ""));

或者 php 使用此代码:

$str = "loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', 'http://www.something.com/videos/JohnsAwesomeCaption.xml', '/videos/video-splash-image.gif')";
echo preg_replace("~(?<=')[^']+\.xml(?=')~", "", $str);

OUTPUT(来自两者)

loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', '', '/videos/video-splash-image.gif')

修改

根据您的评论,使用以下Java代码将字符串分成两部分:

Pattern p = Pattern.compile("^(.*)(?<=')[^']+\\.xml(?=')(.*)$");
Matcher m = p.matcher(str);
if (m.find())
   System.out.println("Output: " + m.group(1) + "<br /><br />" + m.group(2));

输出

Matched: loadMedia('mediacontainer1', 'http://www.something.com/videos/JohnsAwesomeVideo.flv', '<br /><br />', '/videos/video-splash-image.gif')