[解決済み] Regex オプション文字にマッチさせる方法
2022-02-14 10:35:27
質問
今まで正しく動作していると思っていた正規表現があります。オプションの文字にマッチする必要があります。あるのかもしれないし、ないのかもしれない。
ここに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桁目から最後の桁のグループをキャプチャしないのでしょうか?
関連
-
[解決済み] 特定の文字が後にない'単語'を探す
-
[解決済み] 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 実装 サイバーパンク風ボタン