正規表現がうまく機能します。正規表現場所。
しかし、シェル内で使用しても効果はありません。
#!/bin/bash
authEmail="[email protected]"
echo "$authEmail"
if [[ "$authEmail" =~ ^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(test)\.com$ ]]; then
echo "Proper Email detected $authEmail"
else
echo "Email address $authEmail is invalid."
fi
常に印刷されますEmail address [email protected] is invalid.
私は何を逃したことがありませんか?
ベストアンサー1
Bashは=~
POSIX ERE(拡張正規表現)を使用しますが、ポリメラーゼ連鎖反応通事論。特に(?: )
ERE は非キャプチャ構文をサポートしません。 PCRE(GNUなど)を理解するツールに渡すか、grep
正規表現を変更する必要があります。
GNUの使用
grep
#!/bin/bash authEmail="[email protected]" echo "$authEmail" if printf '%s\n' "$authEmail" | grep -qP '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(test)\.com$'; then echo "Proper Email detected $authEmail" else echo "Email address $authEmail is invalid." fi
正規表現の変更
#!/bin/bash authEmail="[email protected]" echo "$authEmail" if [[ "$authEmail" =~ ^[a-zA-Z0-9_.+-]+@(([a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?test\.com$ ]]; then echo "Proper Email detected $authEmail" else echo "Email address $authEmail is invalid." fi
もちろん、実際には非キャプチャグループは必要ありません。あるいは、キャプチャグループの場合、PCRE式を次のように変更することもできます。
^[a-zA-Z0-9_.+-]+@(([a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?test\.com$