正则表达式bash中的不规则性



我看到了关于正则表达式的信息分配,但未能找到问题的解决方案。我希望这之前没有被报道过。和往常一样,我对获得解决方案不太感兴趣,而是理解它为什么会这样工作。只有这样,我才能学习bash及其所有的复杂性。

我的例子:

#!/bin/bash
Stext="Hallo World"
re="(.[a-z]*)$"
[[ $Stext =~ $re ]]
DBTable=${BASH_REMATCH[1]}
echo $DBTable
DBTable=`expr "$Stext" : $re`
echo $DBTable

正如你们大多数人所能猜到的,我没有得到世界打印两次,我不知道为什么。

到目前为止,我已经设法从expr版本中获得了一些响应,将表达式转义为:

DBTable=`expr "$Stext" : '(.[a-z]*)$'`

这仍然没有产生预期的结果。

有人能给我一些见解吗。

expr将正则表达式视为隐式锚定在字符串的开头—也就是说,它隐式地添加了^—所以你需要在兴趣点之前提供一切。此外,正如您所注意到的,您需要编写(),而不是(),因为expr使用的是基本正则表达式(BRE),而不是扩展正则表达式(ERE)。所以,这个:

expr 'Hallo World' : '.[a-z]* (.[a-z]*)$'

将打印CCD_ 8。

最新更新