範囲内の単一の数字をチェックする正規表現パターンは何ですか?テスト時に機能しているように見える次のパターンを試しています
https://regex101.com/
。
パターン:\b([0-5])\b
予想される結果:
入力:2出力:OK
入力:5出力:OK
入力:6出力:なし
入力:22出力:なし
test$ ch=2
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=6
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=62
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=0
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$
私もダブルリターンを試しました。
test$ ch=2
test$ [[ $ch =~ \\b[0-5]\\b ]] && echo "ok" || echo "no"
no
test$ [[ $ch =~ \\b([0-5])\\b ]] && echo "ok" || echo "no"
no
私の場合、bashは常に「いいえ」を提供します。なぜこれですか?
ベストアンサー1
$ch
ASCIIが数値0
、、、、またはいずれかであることを確認するには、次のように1
します。2
3
4
5
移植性(
sh
構文):case $ch in ([012345]) echo OK;; (*) echo not OK;; esac
Cohenスタイルの代替案:
if [[ $ch = [012345] ]]; then echo OK then echo not OK fi
するいいえuse ranges such as for input validation as (depending on system and locale) that tends to include many other characters that happen to sort between 0 and 5 beside 012345 such as ٠١٢٣٤۰۱۲۳۴߀߁߂߃߄०१२३४০১২৩৪੦੧੨੩੪૦૧૨૩૪୦୧୨୩୪௦௧௨௩௪౦౧౨౩౪౸౹౺౻౼౽౾೦೧೨೩೪൦൧൨൩൪෦෧෨෩෪๐๑๒๓๔໐໑໒໓໔༠༡༢༣༤༪༫༬༭༳၀၁၂၃၄႐႑႒႓႔፩፪፫፬០១២៣៤៰៱៲៳៴᠐᠑᠒᠓᠔᥆᥇᥈᥉᥊᧐᧑᧒᧓᧔᧚᪀᪁᪂᪃᪄᪐᪑᪒᪓᪔᭐᭑᭒᭓᭔᮰᮱᮲᮳᮴᱀᱁᱂᱃᱄᱐᱑᱒᱓᱔⁰⁴₀₁₂₃₄⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅛⅜⅟↉①②③④⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓾⓿❶❷❸❹❿➀➁➂➃➉➊➋➌➍➓〇〡〢〣〤㉈㉉㉊㉋㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㋀㋁ ㋂㋃㋉㋊㋋㍘㍙㍚㍛㍜㍢㍣㍤㍥㍧㍨㍩㍪㍫㍬㍭㍮㍯㏠ ㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽ 01234[0-5]