prococo
@prococo (Sanma)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

正規表現を行いたい

解決したいこと

・空白文字以降の文字を削除
・大文字、小文字を問わない
・単語の完全一致

上記の要件を満たしている二つのコード("/\s.*/","",$test) 、("/\b$test\b/i") 
を1行にまとめてpreg_replace(" ","",$test)の第一引数で使えるようにしたいです。

ご協力のほど宜しくお願い致します。

今の状態

行っている正規表現は以下の通りです。

・空白文字以降の文字を削除
・大文字、小文字を問わない
・単語の完全一致

該当するソースコード

("/\\s.*/","",$test);
("/\\b$test\\b/i")

お手隙の際に、コメント・ご教授頂ければ幸いです。
宜しくお願い致します。

0

2Answer

Comments

  1. @prococo

    Questioner

    コメント・ご教授頂き誠にありがとうございます。

    ・空白文字以降の文字を削除
    ・大文字、小文字を問わない
    ・単語の完全一致

    上記の要件を満たしている二つのコード("/\\s.*/","",$test) 、("/\\b$test\\b/i") 
    を1行にまとめてpreg_replace(" ","",$test)の第一引数で使えるようにしたいです。


    ご協力のほど宜しくお願い致します。


この条件だと何をしたいのか見えてこないのですが、置換するのではなく条件に合う文字列が含まれているか否かを調べたいということですか?

preg_match('/^test\b/i', $test);
0Like

Comments

  1. @prococo

    Questioner

    コメントありがとうございます!
    また説明不足で申し訳ございません。

    条件に合う文字列が含まれているかどうかを調べたいです。
    宜しくお願い致します。
  2. であれば、先ほどの preg_match() でよさそうですね。
    空白以降を切り落とすので先頭一致の単語が目的のものかどうかを調べればよいと思います。
    含まれているかどうかを知りたいだけなので


    ```
    if (preg_match('/^test\b/i', $test)) {
    // ここに見つかった場合の処理
    }
    ```

    でいいんじゃないでしょうか?
  3. @prococo

    Questioner

    コメントありがとうございます!

    実装した所、デリミタかエスケープシーケンスのせいか、処理ができませんでした。

    1行にすると処理がややこしくなるため、preg_replaceなどで二段階に分けて処理をする方が良いのでしょうか。


  4. もちろん、前処理として preg_replace() で変換しておいてからということもできますが、具体的にどういうケースで処理できなかったのでしょう?
    おそらく、先に言葉として書かれている条件では足りないものがあるのだと思うので条件を整理しなおした方が良いですね。
  5. @prococo

    Questioner

    コメントありがとうございます!!
    お送り頂いた('/^$test\b/i', $test)を記載すると、変数が認識されず処理が出来ない状態になってしまいます。

    $test = preg_replace("/\\s.*/u","",$tests);
    preg_match_all("/\\b$test\\b/i", $text));
    と記載すると以下のやりたい事ができます。

    ・空白文字以降の文字を削除
    ・大文字、小文字を問わない
    ・単語の完全一致

    もう一度マニュアルなど読み少し整理し直してみます。
  6. ('/^$test\b/i', $test)
      ^
    「変数が認識されない」というのは '...' と "..." の違いです。
    この違いについては、この方の解説が参考になると思います。
    https://qiita.com/chimayu/items/9b9cb14548aa7dd8da1b#%E6%96%87%E5%AD%97%E5%88%97%E5%86%85%E3%81%A7%E3%81%AE%E5%A4%89%E6%95%B0%E5%B1%95%E9%96%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

    検索パターンも変数でコントロールしたいのであれば、

    $pattern 探したい単語
    $subject 探したい単語が入っているであろう文字列
    if (preg_match("/^$pattern\\b/i", $subject)) {
    // 見つかった場合の処理
    }
  7. @prococo

    Questioner

    参考資料お送り頂きありがとうございます!
    もう一度マニュアルや参考資料を読み少し整理し直してみます。
    ご教授頂きまして誠に有難うございます。

Your answer might help someone💌