这是输入字符串:
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')
谢谢!
答案 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);
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')