• ベストアンサー

正規表現が解りません

正規表現が難しくて困っています。 次のようなパターンはどうやって表せば良いのでしょうか? (1)"http"から始まる文字列である。 (2)"http"もしくは"a"から始まらない文字列である。【否定文】 初歩的な質問で申し訳ありませんが、どなたかご存知でしたら宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.1

(1) これがわからないというのが信じられません。正規表現の初歩です。 ^http.* (2) 否定形は正規表現で表すのが困難ないし不可能です。PHPカテゴリということは、PHPで使うんでしょうから、 if(preg_match("^(http|a).*",$string)==0) のようにPHPのレベルで否定を処理すると良いです。

HYSTER
質問者

お礼

関数を使って否定を作れば良かったのですね♪ 参考になりました! notnotさん、ありがとうございます☆

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現で一致しない(否定)場合の書き方

    正規表現で特定の文字列パターンに一致しない(否定)場合の書き方 ものすごく初歩的な質問なのですが、正規表現での否定の仕方がわかりません。 例えば、以下のように書いた場合は「第1回」や「第10回」などの文字列が一致しますが、 逆にこれらの条件に一致しないようにしたい場合はどのように記述すればよろしいのでしょうか? 第[1-9]+回

  • Linuxの正規表現について

    Linuxの正規表現について教えてください。 正規表現を使うと、文字列のパターンを表す事ができる。例えば、行頭が「#」で始まる行は____、aもしくはfで始まる三文字の文字列は____となる という問題なんですけど____の部分をだれか教えてください。明日テストなんだけどわからくて… お願いします。

  • javaの正規表現について質問です。

    javaの正規表現matchesに関して質問です。 正規表現を用いて文字列が半角数字のみで出来ているかどうかを判定したいと思っています。 調べたとろこ下記の正規表現で判定できそうなのですが、 正規表現のルールが理解できず困っています。 ------------------------------------------- String aaa = "0123456789"; //パターン1 aaa.matches("^[0-9]{10,11}$"); //パターン2 aaa.matches("^[0-9]+$") ------------------------------------------- パターン1 ^[0-9]   →  文字列の先頭が0~9か判定 {10,11}   →  10~11回繰り返す(繰り返すというのは[0-9]かどうかということでしょうか?)           12文字目に文字を入れた下記文字列でもfalseが返ってきました。           解釈が間違えている?           String aaa = "0123456789a"; $      →  文字列の最後が[0-9]を10~11回繰り返しているかどうか? パターン2 ^[0-9]   →  文字列の先頭が0~9か判定 +$ →  文字列の最後が???? すいません自分で書いてて混乱してきました。 どなたかアドバイス下さい。

    • ベストアンサー
    • Java
  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • さくらエディタでの正規表現マクロ

    正規表現でタブ区切りの文字列の順序を入れ替える作業を試みています。 AAA BBB CCC PPP QQQ RRR のような文字列を BBB CCC AAA QQQ RRR PPP のように2列目、3列目、1列目のように順番を入れ替えたいです。 VBScriptで1行ずつ読み込み、タブを区切り文字として、配列に放り込み、配列の順番を指定して出力すればなんとか対応できるのですが、どうしてもさくらエディタで実装したいのですが、正規表現を駆使して対応できないものでしょうか? 検索により、パターンにマッチする部分は正規表現で2列目とか3列目というのは書けるのですが、パターンマッチだけで、置換後の文字列に変数などを使用できず苦しんでいます。 正規表現を用いていれればいいし、無理なら、さくらエディタで秀丸のように配列やFOR文などを使いたいのですが、使い方がわからず、質問しました。 ご存知の方がいらっしゃれば、教えてください。

  • 正規表現

    例えば下のような文字列があって、{~} を正規表現で最初の一つをマッチさせたいのですが、{~} が複数あると最初の一つだけを取り出すことができません。 あああああ{aaaaa}いいいいい{bbbbb}ううううう パターンは /{.*}/ こんな感じでやっているのですが結果は、 {aaaaa}いいいいい{bbbbb} となってしまいます。 正規表現に詳しい方教えてください。

  • 文字列の否定の正規表現

    文字列の否定の正規表現 次のような「File」の前の文字列を大文字に置き換えるという文で 「common」という文字列だけはそのまま置き換えないようにしたいのですが、 $string = "commonFile aaFile"; $pattern = '/(\w+)(?![common])(File)/e'; $replacement="ucwords('\\1')"; $string = preg_replace($pattern, $replacement, $string); print htmlspecialchars($string); //Common Aa と表示される このやり方だと「\w+」が効いてるせいなのか先読み否定の「?![common]」が効いてくれません・・・ $pattern = '/(aa)(?![common])(File)/e'; print htmlspecialchars($string); //commonFile Aa と理想とする結果が表示される と具体的な文字列だと要求どおりになるのですが、 そうではなくて「File」の前が「common」の時だけ無視して欲しいのです。 どのように記述すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現にて質問があります。

    テスト勉強をやっていて過去問をみたら正規表現の部分だけわからずにいます (1)α=(0|10)*2(1|00|010)+ (2)α=(ab|c)*c(bc|a)+ (3)α=(1|22)*a(333|4444)* (1)正規表現αが表す文字列内、文字列長が1のものすべてを列挙せよ (2)正規表現αが表す文字列内、文字列長が2のものすべてを列挙せよ (3)正規表現αが表す文字列内、文字列長が3のものすべてを列挙せよ (4)正規表現αが表す文字列内、文字列長が4のものすべてを列挙せよ の答えを教えてもらえないでしょうか? もしよろしければどうやってとけばいいかのアドバイスもお願いします

  • 正規表現について

    正規表現について質問をさせていただきます。 VB6.0にて正規表現を使用し、入力された文字のチェックを行っていますが どうしてもうまくいきません。 チェックしたい文字は A(半角アルファベット大文字1文字)または AAA(半角アルファベット大文字3文字)または (AAA)(半角カッコつき半角アルファベット大文字3文字)で 上記3パターン以外はエラーとしたいと思っています。 パターンは下記のように作成したのですが "(^[\(][A-Z]{3}[\)])|(^[A-Z]{1,3})" A、AAA、(AAA)以外でもA(AA)やAAAA等も正常ケースとして通過してしまいます。 パターンをどのように作成すればよいか教えて下さい。 よろしくお願いします。

  • 正規表現について教えてください。

    正規表現について教えてください。 Oracleで開発を行っている者ですが、ネットや本で調べても わからない箇所がありましたので、ここに質問として挙げさせていただきます。 ご教示いただけると幸いです。 現在、下記のようなデータが入ったテーブルがあります。 ---------------------------------------------------------------------------------- ID | SENTENCE          | REG_EXP ---------------------------------------------------------------------------------- 1 | <○○○:XXXX>      | [^<][^:]+ ---------------------------------------------------------------------------------- 2 | <○○○:XXXX>→<△△△:XXXX> | ---------------------------------------------------------------------------------- 3 | ■■■■■<○○○:XXXX> | ---------------------------------------------------------------------------------- このテーブルを使って、アプリを作っているのですが、 期待動作としては、SENTENCEの列に入っている文字列を REG_EXPの列に入っているデータ(正規表現のパターン)で マッチした文字列を切り取るようにしたいのです。 例えば、IDが1の場合は○○○が切り取られるのが期待動作です。 (注.この動作は、REGEXP_SUBSTR関数を用いてSQLで実行します。) お聞きしたいのは、IDが2の場合は△△△を、IDが3の場合は○○○を、 配列の最初の要素に入れるには、正規表現をどのように記載すればよいのか、ということです。 ○、△、■、Xの部分は英数字、日本語のどれが入るのかはわかりませんが、 <や→、:などの全角記号のフォーマットはこのままになります。。 IDが2の正規表現は[^<:→]+[^<:→]+[^<:→]+ で試してみたのですが、 うまく出来ませんでした・・・。 テーブルの線の調整がうまくできず、 表が見づらくて申し訳ありませんが、 正規表現に詳しい方、ご教示をよろしくお願いいたします。