regex - bash 中的正则表达式不规则

标签 regex bash

我看到了很多关于正则表达式的信息,但找不到解决我的问题的方法。我希望之前没有涉及到这一点。像往常一样,我对获得解决方案并不那么感兴趣,而是想了解它为什么会这样工作。只有这样我才能学习 bash 及其所有的复杂性。

我的例子:

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

正如你们大多数人所猜到的,我没有将 World 打印两次,我也不知道为什么。

到目前为止,在将表达式转义为:

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

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

任何人都可以给我一些见解吗?

最佳答案

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

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

将打印World

关于regex - bash 中的正则表达式不规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9721356/

相关文章:

html - 如何在非 html 文件中找到 html 标签?

python - 检查 CSV 中的正则表达式

python - 尝试使用只有两个或更多元音出现的单词打印到文本文件

linux - 用于捕获文件中更新部分的 Shell 脚本

linux - 允许在 rbash 中完成制表符

.net - RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

Java 正则表达式问题

bash - openssl:如何在控制台中禁用 "writing RSA key"消息

bash - 处理由反引号命令产生的带有空格的路径

linux - 在 bash 脚本中安全记住 ssh 凭据