使用 expr 提取子字符串

使用 expr 提取子字符串

我正在研究从字符串的开头和结尾提取子字符串。我尝试过使用和不使用“.*”

$expr "ab1cd1efgfedcbaAAAA" : ".*\(1[a-l]*\)"  # Result: 1efgfedcba

$expr "ab1cd1efgfedcbaAAAA" : "\(1[a-l]*\)"    # No Result (1cd was expected)

$expr "ab1cd1efgfedcbaAAAA" : "\(ab1[a-l]*\)"    # Result: ab1cd

为什么“expr”没有给出第二个子字符串搜索的结果。

可以看出,第三次搜索中的子字符串已添加了“ab”前缀。这是第二次和第三次搜索之间的唯一区别。也许我在这里遗漏了一些东西。

'expr' 是如何执行搜索的?

答案1

man expr表示“STRING : PATTERN”表达式已“锚定”,然后在信息页面 ( info coreutils 'expr invocation') 中您可以看到:

`STRING : REGEX'
     Perform pattern matching.  The arguments are converted to strings
     and the second is considered to be a (basic, a la GNU `grep')
     regular expression, with a `^' implicitly prepended.  The first
     argument is then matched against this regular expression.

这意味着您看到的效果是预期的行为。

相关内容