有人可以告诉我如何识别中间部分interestedInThis
并将前缀:fontsize=12
和后缀:fontstyle=bold
反向引用为${1}
和${2}
?< / p>
我正在处理这个字符串:
<fontsize=12 interestedInThis fontstyle=bold>
附录:对不起,我不够精确,具体如下:
interestedInThis
,它将通过空格分开。答案 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
。$3
。答案 4 :(得分:0)
我认为这就是你想要的;
<(.* )?InterestedInThis( .*)?>
如果它们存在,它将返回修复前和修复后,但如果只有一个或两个都不存在,它仍将匹配。
确实存在一个小问题,即空格将包含在标记表达式中,但在匹配后应该很容易删除。
或者,您可以使用lookahead / lookbehind尝试过滤空格作为匹配的一部分:
<(.*(?= ))? ?InterestedInThis ?((?<= ).*)?>