我正在研究从字符串的开头和结尾提取子字符串。我尝试过使用和不使用“.*”
$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.
这意味着您看到的效果是预期的行为。