Chciałbym uchwycić części ciągów pasujących do wyrażenia regularnego (patrz kod poniżej). Na przykład podane: apply plugin: "java"
Chciałbym uchwycić java
.
Złożyłem następujące wyrażenie regularne. Kiedy wykonuję poniższy kod (w systemie Linux lub Mac OS), znaleziono dopasowanie, ale właściwość BASH_REMATCH
tablica jest pusta (tzn. długość zera).
Czy ktoś wie, co jest nie tak z wyrażeniem regularnym i / lub jego zastosowaniem?
regex="^[[:space:]]*apply[[:space:]]*plugin:[[:space:]]*"([[:alpha:]]+)"[[:space:]]*$"
if [[ "$line" =~ $regex ]]; then
echo "Match count is ${#BASH_REMATCH[@]}."
echo ${BASH_REMATCH[1]}
else
echo "No match."
fi
Odpowiedzi:
1 dla odpowiedzi № 1Nie mogę odtworzyć tego w postaci opublikowanej w systemie macOS. Być może masz pułapkę debugowania lub podobny zestaw.
Aby pomóc w debugowaniu, edytuj pytanie, aby uwzględnić:
- Kompletny skrypt, który uruchamiasz (tzn. Zawiera wszystko, co się zapełni
$line
) - Pełne polecenie, którego używasz, aby je uruchomić, i pełne dane wyjściowe
- bash xtrace (
-x
)
Rozszerzyłem twój kod do MCVE, wykorzystując informacje z twoich komentarzy:
$ cat myfile
regex="^[[:space:]]*apply[[:space:]]*plugin:[[:space:]]*"([[:alpha:]]+)"[[:space:]]*$"
line="apply plugin: "java""
if [[ "$line" =~ $regex ]]; then
echo "Match count is ${#BASH_REMATCH[@]}."
echo ${BASH_REMATCH[1]}
else
echo "No match."
fi
Następnie uruchomiłem go w ten sposób i uzyskałem oczekiwany wynik:
$ bash myfile
Match count is 2.
java
Oto wynik z informacjami o debugowaniu:
$ bash -x myfile
+ regex="^[[:space:]]*apply[[:space:]]*plugin:[[:space:]]*"""([[:alpha:]]+)"""[[:space:]]*$"
+ line="apply plugin: """java""""
+ [[ apply plugin: "java" =~ ^[[:space:]]*apply[[:space:]]*plugin:[[:space:]]*"([[:alpha:]]+)"[[:space:]]*$ ]]
+ echo "Match count is 2."
Match count is 2.
+ echo java
java
Oto informacje o systemie:
$ uname -a && bash --version
Darwin hostname 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
Mogę dodać odtworzyć te same wyniki, np. dodawanie trap "[[ a =~ b ]]" DEBUG
do skryptu. Jeśli robisz coś takiego, pojawi się w -x
wydajność.