正規表現についてです。
#が2個以上ある場合に、という条件にしたいです。
しかし、#が連続してあるものはNGとしたいので、どうするか困惑してます。
下記がイメージです。
1#2000 NG
1#200#2#6000 OK
1##2000 NG
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
正規表現ではありませんが、以下の関数で実現可能です。
php
1if (2 < substr_count($string, '#') && false == strpos($string, '##')) { 2}
文字列のチェックをする際、正規表現は最後の手段です。
保守性・メンテナンス性の観点からもお勧めできる手段ではありません。
投稿2015/10/02 15:39
編集2015/10/02 16:30退会済みユーザー
総合スコア0
0
あんまり自信ないんですけど、末尾データのテストはクリアしてます。
^(#|[^#]+#)[^#]+#($|[^#]+$|[^#]+#[^#]){1,}
分解すると
^(#|[^#]+#) //最初の#
[^#]+# //二つ目の#
($|[^#]+$|[^#]+#[^#]){1,}
//二つ目以降、「 即終わり or #無しで終わり or [^#]+#[^#] 」のどれかの繰り返し
NG
1#2000
1##2000#a
1##2000#a#a
#2000#aa##
1#200#2##6000
OK
1#200#2#6000
1#2000#
1#2000#a
1#2000#a#
#2000#aa
#2000#aa#b#c
投稿2015/10/02 21:13
総合スコア2068
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/03 14:35
0
php
1 2 $exp='/^[^#]*(#[^#]+){2,}#?$/'; 3 var_dump(preg_match($exp,'1#2000'));//int(0) 4 var_dump(preg_match($exp,'1#200#2#6000'));//int(1) 5 var_dump(preg_match($exp,'1##2000'));//int(0)
最初や最後に来る場合もいちおう対応
すいません、これじゃだめですね
二つ目の#が最後に来た場合にマッチできない
投稿2015/10/02 15:36
編集2015/10/02 15:39総合スコア7804
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/03 14:36
0
ベストアンサー
/^[^#]*#([^#]+#)+[^#]*$/
で、いかがでしょうか?
投稿2015/10/02 15:31
総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/03 14:37
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/03 14:36