質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

907閲覧

【正規表現】(数字のみ)AND(先頭ゼロ除外)として両方の条件を満たしたい

mjk

総合スコア303

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

1グッド

1クリップ

投稿2022/11/24 03:54

編集2022/11/24 04:38

実現したいこと

正規表現で、数字のみ AND 先頭ゼロ除外の条件を満たす正規表現を書きたい。
初歩的なことだと思うのですが、ご教示頂ければ幸いです。

実現したいこと

半角英数小文字a-z
半角英数大文字A-Z
半角数字0-9
上記の文字がランダムに混在した1文字以上~5文字以内の文字列を入力として、
そのままで数値として扱えるものだけをOKとして出力(取得)したい。

0 OK
12345 OK

01234 NG
00123 NG
ab001 NG
1234a NG
12a34 NG
ABCD NG

試してみたこと

数字のみ、先頭ゼロ除外のみ、の条件を別々に満たすことは出来たのですが、
1行で同時に(AND条件として)条件を満たす正規表現の書き方が分かりませんでした。
プログラムへの実装ではif文などで数字のみの条件を通過した文字列を、
2段階目のif文で先頭ゼロを判定すれば目的は達成するのですが、
正規表現として1行で書けるのではないかなと模索しております。
正規表現チェッカー

正規表現 数字のみ [^0-9] 先頭ゼロ除外 ^0+[0-9]
melian😍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poto568

2022/11/24 04:25

「ランダムに混在した5文字の文字列を入力」とありますが 入力値として「0」とか「ABCD」もあるのでしょうか。
mjk

2022/11/24 04:45 編集

ごめんなさい訂正します。 「0」も「ABCD」もあります。 文字列1文字以上5文字以内です。 (何文字かどうかは正規表現側で判定はしなくても大丈夫です。)
melian

2022/11/24 05:03 編集

^(0|[1-9][0-9]*)$
mjk

2022/11/24 05:09

コメントありがとうございます。 melianさんの書かれたもので今のところ大丈夫そうです。 もしよろしければ回答として頂ければBAさせて頂きます。
melian

2022/11/24 05:15

ありがとうございます、回答を投稿しました。
guest

回答2

0

数字のみ AND 先頭ゼロ除外の条件

正規表現だとANDが苦手なので、この条件を「0だけの1文字 OR 先頭が1-9の数字」というOR条件に脳内で変換できるかがキーですね。

ただ、お書きの、

数字のみ
[^0-9]
先頭ゼロ除外
^0+[0-9]

は、それぞれ「数字のみでない」「先頭ゼロが続く」と日本語で書かれている条件の否定です。
中学で学んだド・モルガンの法則を使うと、これを単に OR すれば元の条件全体の否定になることがわかります。
条件を満たした時だけ処理をしたければ、マッチング後に言語側でこれの否定を取ります。
書きやすいRubyで書くと、if /[^0-9]|^0+[0-9]/ !~ target!~はマッチしないと真の演算子)

あるいは、「条件を満たさない時だけこの処理をしたい」であれば、否定でなく普通にマッチしたら真として、
if /[^0-9]|^0+[0-9]/ =~ targetでいいわけです。

なお、AND条件は、このケースでは先読み・否定先読みを使えば出来ますが、見通しが悪くなります。

投稿2022/11/24 09:50

otn

総合スコア84531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mjk

2022/11/24 11:14

回答と丁寧な解説ありがとうございます。 式と式のORで良かったとは目から鱗です。 ド・モルガンの法則も言われてみればなるほどとなりましたが、 これを自力で気づけるかというと基礎学力的にも頭の柔軟さでも厳しそうです。 これからも分からないことを質問させて頂くことになるのかなと思いました。 回答してくださる方がいらっしゃるので助かります。
otn

2022/11/24 11:40 編集

条件文で、複合条件を扱う時は、ド・モルガンの法則を使うのは日常茶飯事なので、慣れですかね。 NOTがからんだANDやORのときは、ド・モルガンで変換前か変換後かどっちの方が見やすいかは、ほぼ毎回考えます。 条件文の条件じゃなくて正規表現の場合は多くの場合はORの形が見やすいです。
guest

0

ベストアンサー

※ コメントから転記

python

1^(0|[1-9][0-9]*)$

投稿2022/11/24 05:14

melian

総合スコア19749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問