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.1
- 回答日時:
Pearl は知らないけれど、Perl 互換の正規表現を使えば良いのでは?
ereg (POSIX 拡張正規表現関数) → preg_match (Perl 互換)
参考URL:http://www.php.net/download-docs.php
この回答への補足
umotaさん
ご回答ありがとうございました。
今回の場合、Perl互換ではなく、PHPの正規表現をお聞きしたい趣旨です。
キャサリン
No.2
- 回答日時:
質問の一つ目は#1の方の回答のとおりpreg_matchでいいのではないでしょうか?
関数の戻り値が0または1で、マッチに成功していれば1、失敗していれば0ですから、
perl のm演算子と同じ扱いができると思います。
stristrを使う場合でも、戻り値がfalseなのかそれ以外なのかで
判定してやればいいわけで、文字列のある部分以降であるかどうかは
気にする必要はないのではないでしょうか?
質問その2も正規表現はそれでいいはずで、質問にあるパターンなら
"@"にはマッチしないはずです。
戻り値の判定を間違えているとかはないでしょうか?
この回答への補足
sakusaker7さん
ご回答ありがとうございました。
>質問その2の正規表現は、それでいいはず
ちゃんと動作しました。コードの別の部分が間違っていました。
preg_matchは少し調べてみます。もしよろしければ、preg_matchとm演算子を組み合わせた場合の記述例を教えていただけるでしょうか?
キャサリン
No.3
- 回答日時:
preg_matchとm演算子の組み合わせというのが具体的にどういうことなのか
わかりません。
perl でm演算子を使った書き方をpreg_matchを使ったPHPでは
どう書くのかということでしょうか?
この回答への補足
sakusaker7さん
ご回答ありがとうございました。
>perl でm演算子を使った書き方をpreg_matchを使ったPHPでは
>どう書くのかということでしょうか?
私の質問の意図は、上記にsakusaker7さんがおっしゃるとおりです。
キャサリン
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について少し勉強します。
キャサリン
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの正規表現で【】内を文字列...
-
onedrive にexcelファイルをア...
-
VBSの「MsgBox」について
-
こちらはただの直列処理ですか?
-
複数ファイルを連続でダウンロード
-
パースエラーとは?
-
リンク先を隠す方法はないでし...
-
拡張子php画像をjpg画像等に変...
-
図に示す階層構造で,現在のデ...
-
C# Excelファイルへの画像挿入。
-
PHPとCSVで簡易データベースな...
-
Subversionで、ファイルをリネ...
-
ワードプレス、Contact Form 7...
-
include先でのinclude元の変数...
-
PHPのif文でその処理を途中で抜...
-
PHPでネットワークドライブのop...
-
FTPコマンドでディレクトリごと...
-
xamppのDocumentRootでindex,ht...
-
文字化けについて
-
「クラス関数」「メンバ関数」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 指定文字列以降の削除
-
PHPの変数で最初から2行分の文...
-
DIRECTORY_SEPARATORについて
-
^[a-zA-Z_][a-zA-Z0-9_]* でマ...
-
正規表現で「チルダ(~)」をマッ...
-
PHPでurlから第4レベルドメイン...
-
PHPと正規表現とワイルドカード...
-
正規表現でタグからURLを取り出...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
PHP8を使うと、大量のWarningが...
-
別ファイルの変数を呼び出した...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
Subversionのリポジトリの削除
-
phpでPEAR::DBを使っているので...
-
.phpと.incファイルの違いはな...
おすすめ情報