• ベストアンサー

正規表現で、ある文字を含まない文字列のチェック方法について

正規表現で、ある文字(対象は複数)を含まない文字列をチェックしたいのですが、どうもうまくいかないので相談させて頂きます。 チェック対象文字(例:壱、拾、A、Z) 上記の文字以外のチェックは、 [^壱拾AZ]となるかと思いますが、 チェック対象文字を含まない文字列をチェックするためには、 どのような正規表現としたらよいのでしょうか? ご教授の程、よろしくお願い致します。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

正規表現は苦手なのですが… [^壱拾AZ]は「壱拾AZ」以外の文字という意味は正しいですが、対象文字列の全てが壱拾AZ以外の文字からなっているという表現にはなっていませんよね。 文字列内に「壱拾AZ」以外の文字が存在すれば、それにヒットするはずです。 >ある文字(対象は複数)を含まない文字列をチェックしたい の「ある文字」が「壱拾AZ」だとすればそのまま[壱拾AZ]でTestして、マッチしたら否、マッチしなければ正という判定をすればよいのでは? (これだと質問内容のすり替えかなぁ…) ちゃんと、文字列全体をマッチさせようとするなら、 ^[^壱拾AZ]*$ とでもなるのだろうか。(←自信なし) (ついでに、VBAの末尾の$は、なんだか動作がやや曖昧だった記憶があります↓。怪しいのは$でなくて?だったかな?) http://oshiete1.goo.ne.jp/qa4821264.html

small-ma
質問者

お礼

ご回答ありがとうございます。 早速試してみたところ、ご提示頂きました正規表現で うまく動作しそうです。 大変参考となりました。 ありがとうございます。

その他の回答 (1)

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.2

こんにちは  質問がいまいち理解できてないのですが.. >上記の文字以外のチェックは、[^壱拾AZ]となるかと思いますが、 >チェック対象文字を含まない文字列をチェックするためには、  「上記の文字以外(の文字)」パターンを使って「上記の文字以外(の文字)で構成された文字列」のパターンを作りたいのですよね。  文字列なので1文字も文字列とすれば、「0回以上の繰返し」か「1回以上の繰返し」を使うとよいでしょう。 ●「0回以上の繰返し」 [^壱拾AZ][^壱拾AZ]* ●「1回以上の繰返し」(正規表現の実装の程度により使用不可もある) [^壱拾AZ]+

small-ma
質問者

お礼

質問の意図がわかりづらいにも関わらず、 ご回答頂きまして、ありがとうござます。 ご提示頂きました内容は、非常に参考となり、大変助かりました。 ありがとうございました。

関連するQ&A

  • PHPにおける正規表現について

    PHPにおける正規表現について ご教授ください。 いわゆる、対象の文字列が複数行にわたっていた場合のことです。 $data = <<< EOF ABCDE FGH EOF; $hoge = preg_match("/EF/" ,$data,$match); と上記のようなコードがあった場合 対象の文字列群から【EF】という文字列を検索したい場合、どのように記述したら 【E(間に改行)F】の文字列と一致させる事ができるでしょうか? 仮に正規表現の修飾子の【s】や【m】を用いても上記の例の場合 一致させることができないと思います。 やはり、対象の文字列群 $data の改行文字をいったん削除したものから検索 するのがベターでしょうか? 正規表現に造詣の深い方よろしくご教授ください。

    • ベストアンサー
    • PHP
  • シェルで使われる正規表現について

    シェル(UNIX)で使われる正規表現ですが、 メタ文字に、アスタリスク「*」があるのですが、 「A*Z」と「Ab*Z」でマッチするパターンですが、 例えば、以下の様な文字列があるとします。 AZ AbZ AbcZ AbcdZ AbcdeZ 「A*Z」でマッチさせると AZ AbZ AbcZ AbcdZ AbcdeZ となり、 「Ab*Z」でマッチさせると AZ AbZ となります。 何故、「A*Z」ではすべてがマッチの対象になるのですか。

  • 正規表現による文字列のチェックについて

    文字列の入力チェックで困っています。 入力された文字列が以下の文字のみで構成されているか、正規表現でチェックするにはどうすれば良いか教えてください。 できれば一発でチェックしたいです。 ・全角(漢字、ひらがな、かたかな)※英数字を含め、左記以外の全角は使用禁止 ・半角英数字 ・半角記号(「-」「.」「:」「*」「&」)※後から追加変更される可能性がある Java(UTF-8)とJavaScript(Shift-JIS)それぞれで対応できる方法をお願いいたします。

  • 正規表現についての質問

    正規表現を使って、文字列を抜き出したいのですがどうすればよいでしょうか? 対象となる文字列→<ここは文章>##あいうえお[1]:"test.jpg"##<ここは文章> 抜き出したい文字例→##あいうえお[1]:"test.jpg"## の##で囲まれた箇所です。 正規表現ど素人なため、どなたかご教授くださいm(_)m

    • ベストアンサー
    • PHP
  • <正規表現>直書きしない文字列否定

    Objective-Cの正規表現について質問です。 表計算ソフトなどで使う数式を検索対象文字列として、「引数内に関数が使用されていない関数」をマッチさせたいと考えています。 どの様な正規表現であれば良いかご教示頂けますでしょうか。 以下に具体例を示します。 -------------------------------------------- ■検索対象文字列 =SUM(A1:A3;SUM(B1:B3);ROUND(IF(C2>10;1.234;0);2)) ※数式の内容は適当です ■マッチさせたい文字列 SUM(B1:B3) IF(C2>10;1.234;0) ■補足説明 1) 検索対象文字列の最初のSUM関数の引数内には別のSUM関数等が使用されているので除外。 2) 2番目のSUM関数の引数内には関数が使用されていないのでマッチさせる。 3) ROUND関数の引数内にはIF関数が使用されているので除外。 4) IF関数の引数内には関数が使用されていないのでマッチさせる。 ■その他条件 1) 関数名は2~5文字の英字とする  例.SUM(),IF(),ROUND()など 2) 正規表現内で関数名の直書きはしない 3) セル参照式のアルファベットは必ず1文字とする  例.A1やZ30等。AB1やBZ30等は無い。 -------------------------------------------- 関数の引数内に「英字2~5文字がある場合は除外する」と言う意味で、以下の様な正規表現を組んだのですが上手くいきませんでした。 [A-Za-z]{2,5}\([^([A-Za-z]{2,5})]*\) 以下の様に関数名を直書きすれば理想の結果となるのですが… [A-Za-z]{2,5}\([^(SUM|IF|ROUND)]*\) あくまで、いろいろな関数名に可変で対応したいと考えています。 どの様な正規表現であれば良いでしょうか。 お知恵を貸して頂ければと思います。 宜しくお願い致します。

  • 文字列を含まないという正規表現は?

    お世話になります。 例えば、文字「a」を含まないという正規表現は、 "[^a]" となりますが、文字列「abc」を含まないという正規表現はどうなりますでしょうか? "[^abc]" ではだめでしたし、 "[^(abc)]" でもだめでした。 また、改行などの制御文字を含めたどんな文字でもいいという正規表現はどうなりますでしょうか? ".*" では改行などが含まれるときはだめでした。 どうかご教授のほどよろしくお願い致します。 次のサイトは参考にしたサイトです。 正規表現の解説 目次 http://www4.ocn.ne.jp/~kaerume/k2e/regex_top.html#mnu_top

  • 正規表現について

    /^R|ruby$/ 上記のような正規表現があったとします。 この正規表現の【|】の判断がわかりません。具体的には、/^ $/という記述から 対象の文字列の先頭がRかrのどちらかで以降がubyと続く文字列にマッチという 意味だと解釈しているのですが違うのでしょうか? 具体的にはRubyという文字列かrubyという文字列の二つのうちどちらかにしか マッチしないとおもっていたのですが、 rrubyという文字列やRrubyという文字列にもマッチします。そもそもこの場合のR|rの箇所ですが、これはRかrのどちらかが先頭にあり 二文字目からはubyという文字列がつづきますよ。という正規表現ではないのでしょうか? かなりこまっています。 識者のかたご教授ください。

  • 正規表現について

    こんにちは 正規表現を勉強中のものです 数字がカンマで連結された文字列(例:352549,352998,352933,352698,28309)を 調べる為の正規表現がわからなく困っております。 例の数字部分に、数字とカンマ以外が入っていたらfalseを返すようにしたいのですが、 「^[0-9\,]+$」 で対応できるかと思ったのですが、思い通りに行かず困っております。 わかる方がおられましたら、ご教授お願いできますでしょうか。 よろしくお願いいたします。

  • ACCESS VBAでの正規表現チェックについて

    いつもお世話になっています。 現在ACCESS2003で開発を行っているのですが、文字の入力チェックで悩んでいます。 正規表現チェックを使用し 半角英数字と"-", "_", "!", "@", "+", "/", "*"以外の文字が入力されればエラーメッセージを表示させようとしているのですが、うまく動作しません。 ●現在の処理 '検証結果フラグ b_error = True '入力許可文字列 s_ok_text = "*[”正規表現”]*" '入力文字列が空で無い場合はチェック処理を実行する If Not IsNull(”入力文字”) Then If ”入力文字” Like s_ok_text Then '入力許可文字列以外が含まれていた場合はエラーを返す b_error = False End If End If s_ok_textに入力可能文字を設定しているのですが、上記入力許可文字の設定の仕方がわからない状況です。 正規表現のチェックに詳しい方がいましたら、上記チェックの方法をご教授頂きたく思います。 宜しくお願い致します。

  • 正規表現 英数字を1つ以上含む文字列

    ASP.NET(VB)での入力チェックのために、 半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列 (ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む) の正規表現での表し方が知りたいです。  How To: ASP.NET への入力を制約するために正規表現を使用する方法  http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx  (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$  8から10文字で、最低1文字の数字と1文字の英字を使用し、特殊文字を使用してはいけません。 上記を参考に、 (?!^[0-9]*$)(?!^[a-z]*$)(?!^[A-Z]*$)^([a-zA-Z0-9])$ こんな感じかなぁと試してみたのですが、ダメでした。 そもそも「!」の意味が分かりません。否定でしょうか??

専門家に質問してみよう