使用正则表达式查找两个字符串之间的字符串

时间:2013-11-06 20:26:39

标签: xml regex

我有一个XML文件,我需要找到一个字符串,但前提是它存在于另外两个字符串之间。

例如:

<data name="gDefaultTheme" xml:space="preserve">
<value>Temaet "Standard" kates.</value>
</data>
<data name="gCannot" xml:space="preserve">
<value>Temaet "{0}" er satt som staettes.</value>
</data>

在上面的xml中,我需要在<value>标签中找到双引号,但不要在XML本身中找到任何双引号。

我到目前为止最接近的是(?<=<value>)(.*?)(?=</value>),但这只是选择了值标签之间的所有文字。

由于

3 个答案:

答案 0 :(得分:0)

这是XML。对于您正在使用的任何平台使用XML解析器。对于除最简单,最受限制的场景之外的所有场景,您无法使用regexp可靠地执行此操作。

答案 1 :(得分:0)

考虑以下Regex ......

(?<=<value>.*?\").*(?=\".*</value>)

答案 2 :(得分:0)

如果您不需要,请不要使用外观;他们只是让你的问题变得更加困难。使用捕获组通常要容易得多,如下所示:

<value>[^<"]*"([^"]+)"

标记之后的[^<"]*确保您匹配的字符串实际上位于该元素的内容中,而不是完全位于属性值或其他元素中。 ("[^"]+")部分将引用的字符串保存在捕获组#1中。如果您想要不带引号的字符串,可以将其更改为"([^"]+)"

不应该需要匹配其余内容和结束标记。我当然假设任何<value>的内容中最多只有一个带引号的字符串。