Extração de Substring com expr

1

Eu estava trabalhando na extração de subcadeia desde o início & no final da string. Eu experimentei com e sem ". *"

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

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

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

Por que o 'expr' não deu resultado para a segunda pesquisa de substring.

Pode-se ver que 'ab' foi prefixado na substring na terceira pesquisa. essa é a única diferença entre a segunda e a terceira pesquisa. Talvez eu esteja faltando alguma coisa aqui.

Como a pesquisa é realizada por 'expr'?

    
por Sudhish Vln 01.12.2015 / 20:41

1 resposta

8

man expr diz que a expressão "STRING: PATTERN" está "ancorada" e, em seguida, na página de informações (info coreutils 'expr invocation') você pode ler:

'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.

O que significa que o efeito que você vê é o comportamento esperado

    
por 01.12.2015 / 20:44