
php(PHP5)の正規表現に関する演算子についての質問です。
一つ目の質問
ある特定の1文字が指定した文字列の中に含まれるかどうか調べたいのですが、perlでは「m/a/」のような演算子を使っていました。ですが、PHPでは「m/a/」は使えないようです。PHPでは、どのように記述すればよいのでしょうか?
例
$string = "abcdefg"
とし、$stringに「d」が含まれるかどうか調べたい。
ちなみに「stristr」を使用してstristr($string, "d")などとすると,
「d」が$stringに含まれない場合、falseを返してくれるのは良いのですが、含まれる場合、trueではなく文字列の中から一致した検索文字以降を返すのでだめでした(私がどうやるか知らないだけかも)。
2たつ目の質問
また、ある特定の文字の前と後に不特定の一文字又は複数の文字が含まれるかどうか調べたいのですが、以下のような正規表現では、だめでした。
$string
ereg(".+@.+",$string)
上記の正規表現の場合、$stringの文字列が「@」一文字だけで「@」の前と後に何の文字もなくてもtrueを返してしまいます(本当は@マークの前後に最低1文字以上の文字列がなければだめなようにしたいのです。)。
どのようにすれば、良いのでしょう?
ご存知の方がおられましたら、お教え下さい。
キャサリン
No.4ベストアンサー
- 回答日時:
PHPは本職でないので抜けがあるかもしれませんが、
Perl
if ($string =~ m/pattern/) {
}
PHP
if (preg_match("/pattern/", $string)) {
}
Perl
while (my ($v) = $string =~ m/pattern/g) {
}
PHP
該当するパターンはなし?
Perl
foreach my $v ($string =~ m/pattern/g) {
print $v;
}
PHP
$count = preg_match_all("/pattern/", $string, $matches, PREG_SET_ORDER);
for ($i=0; $i<$count; $i++) {
print($matches[$i][0]);
}
No.5
- 回答日時:
perlの正規表現が分かるならpreg_match、preg_match_all等が使えます。
とりあえずマニュアルをよく読んでみて下さい。
http://jp2.php.net/manual/ja/ref.pcre.php
パターン構文は
http://jp2.php.net/manual/ja/reference.pcre.patt …
パターン修飾子は
http://jp2.php.net/manual/ja/reference.pcre.patt …
です。
なお、PHPにはPerl互換のpreg系以外にもereg(posix準拠)、mb_ereg(eregのマルチバイト対応)がありますが、一番汎用性があるのがperl互換ですね。文字コードだけは注意して下さい(ユニコードの場合は修飾子uをつけるなど)。
パターン修飾子に関してはデリミタの後につけて下さい。m、s、i等が使えます。
preg_match("/パターン/ms",$string)
参考まで
この回答への補足
taketan_mydns_jpさん
ご回答ありがとうございました。
簡単には、理解できました。
pregについて少し勉強します。
キャサリン
No.3
- 回答日時:
preg_matchとm演算子の組み合わせというのが具体的にどういうことなのか
わかりません。
perl でm演算子を使った書き方をpreg_matchを使ったPHPでは
どう書くのかということでしょうか?
この回答への補足
sakusaker7さん
ご回答ありがとうございました。
>perl でm演算子を使った書き方をpreg_matchを使ったPHPでは
>どう書くのかということでしょうか?
私の質問の意図は、上記にsakusaker7さんがおっしゃるとおりです。
キャサリン
No.2
- 回答日時:
質問の一つ目は#1の方の回答のとおりpreg_matchでいいのではないでしょうか?
関数の戻り値が0または1で、マッチに成功していれば1、失敗していれば0ですから、
perl のm演算子と同じ扱いができると思います。
stristrを使う場合でも、戻り値がfalseなのかそれ以外なのかで
判定してやればいいわけで、文字列のある部分以降であるかどうかは
気にする必要はないのではないでしょうか?
質問その2も正規表現はそれでいいはずで、質問にあるパターンなら
"@"にはマッチしないはずです。
戻り値の判定を間違えているとかはないでしょうか?
この回答への補足
sakusaker7さん
ご回答ありがとうございました。
>質問その2の正規表現は、それでいいはず
ちゃんと動作しました。コードの別の部分が間違っていました。
preg_matchは少し調べてみます。もしよろしければ、preg_matchとm演算子を組み合わせた場合の記述例を教えていただけるでしょうか?
キャサリン
No.1
- 回答日時:
Pearl は知らないけれど、Perl 互換の正規表現を使えば良いのでは?
ereg (POSIX 拡張正規表現関数) → preg_match (Perl 互換)
参考URL:http://www.php.net/download-docs.php
この回答への補足
umotaさん
ご回答ありがとうございました。
今回の場合、Perl互換ではなく、PHPの正規表現をお聞きしたい趣旨です。
キャサリン
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列全体に対する置き換え [...
-
お名前comのPHPとmysqlの接...
-
/usr/local/lib/phpとはどうい...
-
*.php、*.php3、*.phtmlの違い
-
.phpと.incファイルの違いはな...
-
PHPで取得したHTML内のdiv要素...
-
FTPでのファイルとディレクトリ...
-
PHPの設定で、 エラーが発生し...
-
ハッスルサーバーで「Warning: ...
-
「クラス関数」「メンバ関数」...
-
php5のpearコマンドがない
-
セッションを使うと要するに
-
include_pathについて。
-
日本語をGETで渡す場合UR...
-
他人にphpファイルをダウンロー...
-
CGIが、aタグで呼ばれたか、img...
-
テキストリンクを2回クリックし...
-
OpenPNEでのGoogleマップAPIに...
-
条件演算子
-
CekePHPでfile_exists関数を使う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列全体に対する置き換え [...
-
正規表現で「チルダ(~)」をマッ...
-
正規表現でタグからURLを取り出...
-
preg_replaceの使い方が分から...
-
正規表現で3回目の単語の後に文...
-
ブログなどでよく使われる記法...
-
PHPでurlから第4レベルドメイン...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
【PHP】ページを更新すると勝手...
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
makefile でファイルをコピーす...
-
フォントの色を変えるには?
-
「クラウドにアップロード」」...
-
拡張子php画像をjpg画像等に変...
-
*.php、*.php3、*.phtmlの違い
-
「クラス関数」「メンバ関数」...
-
.phpと.incファイルの違いはな...
おすすめ情報