文字列の最初と最後から部分文字列の抽出に取り組んでいました。 「。*」を使って、または使わずに実験しました。
$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'が2番目の部分文字列検索の結果を表示しなかったのはなぜですか。
3回目の検索では、部分文字列の前に「ab」が付いていることがわかります。これが2回目と3回目の検索の唯一の違いです。おそらく私はここで何かが欠けています。
'expr'による検索はどのように実行されますか?
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.
つまり、表示される効果は期待される動作です。