[解決済み] Regex オプション文字にマッチさせる方法
2022-01-29 10:55:01
質問
今まで正しく動作していると思っていた正規表現があります。オプションの文字にマッチする必要があります。あるのかもしれないし、ないのかもしれない。
ここに2つの文字列があります。上の文字列はマッチングされますが、下の文字列はマッチングされません。下の文字列には一文字もないため、失敗しています。
開始5桁以降の1文字があれば取得し、なければ残りの文字列の取得を継続したい。この文字は
A-Z
.
を削除すると
([A-Z]{1}) +.*? +
を正規表現に追加すると、この文字以外はすべてマッチしますが、これはちょっと重要なことです。
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
以下は、私が使っている正規表現です。
/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
解決方法は?
使用方法
[A-Z]?
を指定すると、その文字がオプションになります。
{1}
は冗長です。(もちろん
[A-Z]{0,1}
ということで、同じ意味になりますが、その分
?
はそのためにあるのです)。
正規表現を改良して
^([0-9]{5})+\s+([A-Z]?)\s+([A-Z])([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})
また、ほとんどの正規表現では
\d
と同じです。
[0-9]
:
^(\d{5})+\s+([A-Z]?)\s+([A-Z])(\d{3})(\d{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])\d{3}(\d{4})(\d{2})(\d{2})
しかし:本当に11個の別々のキャプチャグループが必要なのでしょうか?もしそうなら、なぜ4桁目から最後の桁のグループをキャプチャしないのでしょうか?
関連
-
[解決済み] 与えられた文字列が与えられた部分文字列を含んでいるかどうかを見つけるための、scala の慣用的な方法は何ですか?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 正規表現で「この文字列までなら何でもあり」にマッチさせるには?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン