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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1424閲覧

PHP 正規表現について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/10/02 15:08

正規表現についてです。

#が2個以上ある場合に、という条件にしたいです。
しかし、#が連続してあるものはNGとしたいので、どうするか困惑してます。

下記がイメージです。

1#2000 NG
1#200#2#6000 OK
1##2000 NG

宜しくお願い致します。

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

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

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

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

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

guest

回答4

0

正規表現ではありませんが、以下の関数で実現可能です。

substr_count
strpos

php

1if (2 < substr_count($string, '#') && false == strpos($string, '##')) { 2}

文字列のチェックをする際、正規表現は最後の手段です。
保守性・メンテナンス性の観点からもお勧めできる手段ではありません。

投稿2015/10/02 15:39

編集2015/10/02 16:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/10/03 14:36

ありがとうございます! 無事に出来ました^^ やっぱりそうなんですね。 アドバイス頂きました関数見てみます!
guest

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

hirohiro

総合スコア2068

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

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

hirohiro

2015/10/02 21:32 編集

^(#|[^#]+#)[^#]+#($|[^#]+$|[^#]+#[^#]|[^#]+#$){1,} これじゃないと、OKの四つ目がno hitになりそうに思うのですが、何故か動いてる…。 ^(#|[^#]+#)[^#]+#($|[^#]+$|[^#]+#){1,} これでよい気がするのだけれど、これだとNGの4,5がHITする…。
退会済みユーザー

退会済みユーザー

2015/10/03 14:35

ありがとうございます! 無事に出来ました^^
guest

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
KazuhiroHatano

総合スコア7804

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

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

退会済みユーザー

退会済みユーザー

2015/10/03 14:36

御回答ありがとうございます! 他の方のもの参考に出来ました!
guest

0

ベストアンサー

/^[^#]*#([^#]+#)+[^#]*$/

で、いかがでしょうか?

投稿2015/10/02 15:31

KiyoshiMotoki

総合スコア4791

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

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

退会済みユーザー

退会済みユーザー

2015/10/03 14:37

ありがとうございます! こちらの回答を使わせて頂きました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問