string="<tag>First Tag</tag>Some random text <tag>Second Tag</tag>More random text<tag>Third Tag</tag>"
pattern='<tag>(.*?)<\/tag>'
if [[ $string =~ $pattern ]]; then
parsedMatch=${BASH_REMATCH[1]}
echo -e "$parsedMatch"
fi
Output : First Tag</tag>Some random text <tag>Second Tag</tag>More random text<tag>Third Tag
Expected output : <tag>First Tag</tag>
在这个例子中,BASH_REMATCH [0]和BASH_REMATCH [1]都是相同的。 我知道其他正则表达式库,但我为什么这样表现这个方式感到困惑?bash正则表达式的多个匹配行为奇怪?
编辑:更改模式,使其不合格,它仍然无法正常工作。这种行为只存在于linux/bash中,所以你需要在那里测试它。
如果存在嵌套标记,则您的正则表达式不匹配。 – 2014-10-28 07:28:53
@RamboRamon它不会但它适合字符串OP提供 – nu11p01n73R 2014-10-28 08:24:54
Nvm这个作品! – user3081457 2014-10-28 11:08:39