如何使用Perl正则表达式在已知标记之前和之后提取文本?

时间:2009-02-06 20:14:22

标签: regex perl

有人可以告诉我如何识别中间部分interestedInThis并将前缀:fontsize=12和后缀:fontstyle=bold反向引用为${1}${2}?< / p>

我正在处理这个字符串:

<fontsize=12 interestedInThis fontstyle=bold>

附录:对不起,我不够精确,具体如下:

  • 前缀和后缀可能不存在
  • 前缀和后缀可以是任何字符串,不一定是fontsize,resp。 fontstyle
  • 我肯定知道,我在寻找什么,即interestedInThis,它将通过空格分开。

5 个答案:

答案 0 :(得分:3)

<([^>]*)interestedInThis([^>]*)>

答案 1 :(得分:0)

对于您的示例,这可能有效

(<fontsize=\d+) (\w+) (fontstyle=bold>)

不幸的是,Perl似乎不支持命名的反向引用,所以我认为你坚持使用<fontsize=12 in $1, ImInterestedInThis in $2 & fontstyle=bold> in $3.

的问候, 利芬

答案 2 :(得分:0)

基本上

(<fontsize=12) (\S*) (fontstyle=bold>)

但是,属性值会改变吗?而且,你必须考虑变量空白?如果是这样,以上变异为:

(<fontsize=\d+)\s+(\S*)\s+(fontstyle=.*>)

另外,在上面,通过使用\ S,interestInThis可以包含任何不是空格的东西。如果那里也有空格,例如interestInThis实际上就像class="x" id="y",那么可能:

(<fontsize=\d+)(.*)(fontstyle=.*>)

请注意,2美元是感兴趣的,而$ 1 / $ 3实际上是你的最终作品。

答案 3 :(得分:0)

试试这个:

my $result = m/(.*)(InterestedInThis)(.*)/;

现在:

  • $result如果找到格式匹配,则为真。
  • 感兴趣,这是$2,但你已经知道它是什么了。
  • 前缀(“感兴趣的内容”之前的所有内容)位于$1
  • postfix(“感兴趣的话”之后的所有内容)在$3

答案 4 :(得分:0)

我认为这就是你想要的;

<(.* )?InterestedInThis( .*)?>

如果它们存在,它将返回修复前和修复后,但如果只有一个或两个都不存在,它仍将匹配。

确实存在一个小问题,即空格将包含在标记表达式中,但在匹配后应该很容易删除。

或者,您可以使用lookahead / lookbehind尝试过滤空格作为匹配的一部分:

<(.*(?= ))? ?InterestedInThis ?((?<= ).*)?>