• ベストアンサー

英数半角文字と「-」を指定する正規表現

英数半角文字と「-」を指定する正規表現が なかなか解りません。 ([a-z\-]+) ([a-z,-]+) いずれもエラーになります。 どなかたご存知のかた、ご教授下さい。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4855/10270)
回答No.5

#3の方がお書きの[a-z-]が正しいわけですが、 ・文字クラスの中でハイフン - を含めたいときは、途中に書くと範囲指定になるので、先頭または末尾に書きます ・文字クラスの中で山記号 ^ を含めたいときは、先頭に書くと否定になるので、先頭以外に書きます ・文字クラスの中で大括弧閉じ ] を含めたいときは、先頭以外に書くと文字クラスの終わりになるので先頭に書きます ・他の文字は [ ( ) { } | $ * + . なども文字クラスの中では特殊な意味を失うのでそのまま書きます ・\ も本来は文字クラスの中では特殊な意味を失い、\ という文字自身を指すのですが、このあたりはプログラムに寄っては動作が異なるようです

sunnylife
質問者

お礼

文字の置く場所で意味が変わってくる訳ですね。 正規表現は奥が深いです。 これらの項目は今後も参考にさせていただきます。 有難うございます。

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

その他の回答 (4)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

英数半角文字と書いといて a-z なのはなぜでしょうか? これだと大文字は対象から外れてしまいます。 で、何の正規表現を使おうとしてどういうエラーになったのかがわからないとなんともならんのですが、 正規表現を文字列として与える言語であったりすると ([a-z\-]+) は ([a-z\\-]+) のように二重にエスケープしないとダメかもしれません。 大抵は #3のTacosanさんのいう [a-z-] で大丈夫のはずなんですが #例外はあります。 >#1どの >「または」という場合の結合子は|(垂線)です。 > "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 ブラケットの中では | は or の意味を持ちませんよ。

sunnylife
質問者

お礼

すみません。環境はPHPで、 .htaccessで RedirectMatch permanent category_([A-Za-z-]+)_([0-9]+)_Sales_1.html$ /$2/ と移動させたいのですが、 通りません。 ([A-Za-z-]+) は、RewriteRuleではうまくいったのですが、 RedirectMatch permanent では使えないのでしょうか

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

一口に「エラーになる」と言われても「どのプログラムで」「その正規表現をどのように与えて」「どのようなエラーが表示されるのか」が分からんと本当はいかんともしがたい. 事実正規表現といってもプログラムによって微妙に違ったりするんだけど, これくらいはたぶんおなじだろうなぁ. 普通には [a-z-] でいいはず. これでダメなら最初に書いたように使ったプログラムの名前とか表示されたエラーメッセージとかを書いてください.

sunnylife
質問者

お礼

[a-z-] でうまくいきました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • dezimac
  • ベストアンサー率56% (2365/4208)
回答No.2

[a-z\-]+ で、小文字のaからzまでと-を1回以上の繰り返しになります。 処理系によって微妙に解釈が異なる事ありますが、 グループ化の()を\(\)としたり、+を\+にしないと動作しない場合もあります。 http://www.kt.rim.or.jp/~kbk/regex/regex.html

参考URL:
http://www.kt.rim.or.jp/~kbk/regex/regex.html
sunnylife
質問者

お礼

参考URL、とても詳しく解説されてますね。 まだ理解不能な部分が多いですが、 今後このサイトを参考にさせていただきます。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

正規表現と言っても言語仕様により微妙に違います。 「または」という場合の結合子は|(垂線)です。 "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。 http://msdn.microsoft.com/ja-jp/library/cc392020.aspx 上記の言語仕様を想定しています。

sunnylife
質問者

お礼

.htaccessにおける「|」はエラーになりました。 プログラミング言語も無数にありますね。 VB関連は挫折中です。 ご解答ありがとうございます。

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

関連するQ&A

  • PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教

    PHPで半角英数、全角文字の組み合わせを許可する正規表現の記述方法を教えてください。 PHPで、ウェブサービスをUTF-8で構築中です。入力項目のうち、1項目を半角英数(0-9、a-z、A-Z)と全角文字の利用を許可したいと考えています。 正規表現を使って判断しようとし、検索して調べてました。しかし、半角英数のみとか、全角文字のみで構成されている場合、という例は見つかるのですが、半角英数と全角文字の複合のみをチェックする方法がわからずにおります。 この ・半角英数、または全角文字で構成されている という条件をチェックする記述方法を教えてください。 今回除外したいのは、半角の記号(0-9、a-z、A-Z以外の半角文字)ですので、 ・半角の記号が含まれている という条件をチェックする記述方法でもかまいません。 また、正規表現でなくても実現できるのであれば、正規表現にこだわる必要もありません。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 正規表現メタ文字「-」のエスケープについて

    いつもお世話になります。 正規表現のメタ文字のエスケープ処理を行いたいのですが、「-」の記号については、「[」「]」の中に出てきたときのみ([a-z]、[0-9]など)、エスケープの対象になります。 この場合、どのような正規表現を指定すれば、エスケープを行うことができるでしょうか。 例)  [a-z|A-z] ⇒ [a\-z|A\-z] 宜しくお願いします。

  • 正規表現について

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

  • FrexibleRenamerで【全角→半角】の正規表現は?

    FrexibleRenamerで【全角→半角】の正規表現は? FrexibeRenamerにあらかじめ用意されている【全角→半角】で変換したところ、 !#$%&’() _などの文字が変換されませんでした。 【全角→半角】は英数に限られているのでしょうか。 正規表現を使おうとしたのですが【全角→半角】の指定方法がわかりません。 これらの記号を【全角→半角】する方法を教えて頂けないでしょうか。 階層丸ごと全フォルダ名と全ファイル名を変更したいのでFrexibleRenamerを使いました

  • phpの正規表現について

    phpの正規表現についてです。 よく入力されたメール・パスワードを判定するのに正規表現で判定させますが、今回の指定する条件は… ・半角英数、0~9の組み合わせ ・使用禁止文字は \ ' @ [ ] の5つ ・入力は8文字以内 例 if(ereg("^[0-9a-z\!\"\#\$\%\&\(\)\=\-\~\|\{\}\;\:\+\*\,\.\/\<\>\?\_]{1,8}$", $pw)){ 記号の意味でよくわからないのがあるのですが、 { }は文字数を指定するものでよろしいのでしょうか? {1,8} は1~8文字までという意味? \が入ると認証が通ってしまってい、困っています。 ユーザーの入力    MySQLの取得結果 例 123\        → データが入らない   \123        → 123   \\123        → \123   123\123      → 123123   \\          → \ といった不具合になってしまい、MySQL側でも入力されたデータと異なったデータが入ってしまいます。\が入っても認証されないようにするにはどうすればいいんでしょうか? 正規表現の参考にしたサイトは http://itbtech.itboost.co.jp/php/php_06.php です。アドバイスよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現

    お世話になります。正規表現の質問です。 \w に当たる文字とハイフンに合致するが、少なくとも一文字はアルファベット(a-z)またはハイフン(-)が含まれていなければならない(つまり、数字だけの文字列は合致しない) という正規表現はどうあらわせばよいでしょうか。 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現メタ文字「-」のエスケープ(再質問)

    いつもお世話になります。 以前に質問しているのですが、私の質問内容が悪かったため、再度質問をあげさせていただきます。 正規表現のメタ文字のエスケープ処理を行いたいのですが、「-」の記号について、「[」「]」の中に出てきたときのみ([a-z]、[0-9]など)、 一括でエスケープしてくれるような正規表現は何を指定すればよいでしょうか。 例えば、以下の文字列があった場合、 ああaa-bb[0-9]いいい-uuu[a-zA-Z] エスケープ処理された結果、以下のようになる。([]内の-のみエスケープ処理されて、「\-」となっている) ああaa-bb[0\-9]いいい-uuu[a\-zA\-Z] 上記の一括エスケープ処理を行ってくれる正規表現は、何を指定すればよいでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 半角大文字英数?

    NECのノートパソコンを使っています。先ほどから、パソコンの上にある、Aというところ のランプが点灯し、変換がおかしいのです。 日本語入力していると、一瞬ですが、英語の大文字が見えます。また、F10キーで英語に変換すると、いきなり半角大文字の英数になってしまいます。さっきまでは、先ずは半角英数からだったのですが・・・ CAPSキーや、CTRLキーなどあちこちいじくりまわしていますが、治る様子が見られません。ご存知の方がいましたら、ご教授願います。

  • [ASP]正規表現で半角英数記号を判定

    [ASP]正規表現で半角英数記号を判定 ASP(VBScript+HTML)で開発作業をしています。 画面から入力された値が「半角英数」のみで構成されていることを検査する為に、 以下の入力チェックを設けています。 set objre = new RegExp objre.pattern = "[^0-9a-zA-Z]" blnCheck = objre.test(sInput) '##sInputは入力値が入った変数 このblnCheckに格納された結果がtrueかfalseかで判定しています。 しかし、半角英数のみでなく、半角記号についても入力を許可することになりました。 上記の処理を「半角英数と半角記号で構成されているかどうか」に変更する為には どのように記述を変更すればいいのでしょうか。 ご存じの方がいらっしゃいましたら助言をいただけないでしょうか。 よろしくお願いします。

  • Perlで使える正規表現を教えて下さい。

    Perlで使える正規表現を教えて下さい。 半角英語で、小文字が3文字以上続いた後、大文字が来る場合、その大文字の右にスペースを入れる。 これをPerlで使える正規表現を教えて頂けないでしょうか? 例 $str = 'AaaAaaaBbbbbCccccDddBbA'; # Aaa Aaaa Bbbbb Ccccc DddBbA ちなみに、色々ネットで調べて試してみて、 $str =~ s/([a-z])([A-Z])/$1 $2/g; が最も近いコードになったのですが、2文字続いただけでもスペースが入り困っています。 宜しくお願い致します。

    • ベストアンサー
    • Perl