This commit is contained in:
@@ -13,3 +13,26 @@ date: 20-05-2025
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
IFS=$'\n\t'
|
IFS=$'\n\t'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## BASH_REMATCH et les tests de regex `=~` avec l'opérateur conditionnel `[[`:
|
||||||
|
[BASH_REMATCH special variable](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-BASH_005fREMATCH)
|
||||||
|
|
||||||
|
Lors d'un test de regex avec du type `if [[ ${variable} =~ ${pattern} ]]`, tous les résultats qui "matchent" le pattern sont stockés dans un variable spéciale `BASH_REMATCH`, qui est en fait un array. On peut donc itérer dessus.
|
||||||
|
|
||||||
|
Exemple :
|
||||||
|
```bash
|
||||||
|
var="un velo"
|
||||||
|
pattern='(u[a-z]+)\s*(v[a-z]+)'
|
||||||
|
|
||||||
|
if [[ $var =~ $pattern ]]; then
|
||||||
|
for m in "${!BASH_REMATCH[@]}"; do
|
||||||
|
echo "$m: ${BASH_REMATCH[$m]}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
Résultat:
|
||||||
|
```txt
|
||||||
|
0: un velo
|
||||||
|
1: un
|
||||||
|
2: velo
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user