アプリ版:「スタンプのみでお礼する」機能のリリースについて

英数半角文字と「-」を指定する正規表現が
なかなか解りません。

([a-z\-]+)
([a-z,-]+)

いずれもエラーになります。

どなかたご存知のかた、ご教授下さい。

A 回答 (5件)

#3の方がお書きの[a-z-]が正しいわけですが、


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

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

お礼日時:2008/11/21 11:25

英数半角文字と書いといて a-z なのはなぜでしょうか?


これだと大文字は対象から外れてしまいます。

で、何の正規表現を使おうとしてどういうエラーになったのかがわからないとなんともならんのですが、

正規表現を文字列として与える言語であったりすると
([a-z\-]+)

([a-z\\-]+)
のように二重にエスケープしないとダメかもしれません。

大抵は #3のTacosanさんのいう [a-z-] で大丈夫のはずなんですが
#例外はあります。

>#1どの
>「または」という場合の結合子は|(垂線)です。
> "[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。
ブラケットの中では | は or の意味を持ちませんよ。
    • good
    • 0
この回答へのお礼

すみません。環境はPHPで、
.htaccessで

RedirectMatch permanent category_([A-Za-z-]+)_([0-9]+)_Sales_1.html$ /$2/

と移動させたいのですが、

通りません。

([A-Za-z-]+)

は、RewriteRuleではうまくいったのですが、

RedirectMatch permanent では使えないのでしょうか

お礼日時:2008/11/20 19:07

一口に「エラーになる」と言われても「どのプログラムで」「その正規表現をどのように与えて」「どのようなエラーが表示されるのか」が分からんと本当はいかんともしがたい.


事実正規表現といってもプログラムによって微妙に違ったりするんだけど, これくらいはたぶんおなじだろうなぁ.
普通には
[a-z-]
でいいはず.
これでダメなら最初に書いたように使ったプログラムの名前とか表示されたエラーメッセージとかを書いてください.
    • good
    • 0
この回答へのお礼

[a-z-]

でうまくいきました。

ありがとうございます。

お礼日時:2008/11/20 19:09

[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
    • good
    • 0
この回答へのお礼

参考URL、とても詳しく解説されてますね。

まだ理解不能な部分が多いですが、
今後このサイトを参考にさせていただきます。

ありがとうございます。

お礼日時:2008/11/20 19:50

正規表現と言っても言語仕様により微妙に違います。



「または」という場合の結合子は|(垂線)です。
"[A-Z|a-z|\-]"が半角英字とハイフンの検出パターンです。

http://msdn.microsoft.com/ja-jp/library/cc392020 …
上記の言語仕様を想定しています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/20 20:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!