ページ 11

正規表現

Posted: 2009年5月28日(木) 15:31
by ウズ
いつもお世話になっています。

C言語で正規表現を使いたいのです。

regex.hのregexecを使えばできるのはわかったのですが、

肝心の正規表現がよくわかりません。

使用可能文字が0-9 a-z ! ? [ ] _ で、

条件として「_」が2個連続(1個or3個以上はok)は×
[/url]でかこまれたものは×

というものなのですが、

一度で表現してみるもうまくいかず、

わけて表現してみようとしても、ちゃんと判断できず、

困っております。。

以下、試してみた表現です。。



使用可能文字をチェック
"[0-9a-zA-z!\?\[\]_]+"
→コンパイル時点でwarningがでました

[/url]で囲まれるをチェック
"^[.*$]"
→コンパイルはとおりましたが、引数に入力した値をチェックにかけているのですが、
 引数に [任意の文字] と指定するとうまく動きませんでした。。

「_」で2連続をチェック
"^_{2}"
→「_」3以上の連続でもひっかかりました。


正しい表現を、どなたか教えてください。

Re:正規表現

Posted: 2009年5月28日(木) 17:05
by 御津凪
> 使用可能文字をチェック
> "[0-9a-zA-z!\?\[\]_]+"
> →コンパイル時点でwarningがでました

A-z になってますが、それが原因ではないでしょうか。

> [/url]で囲まれるをチェック
> "^[.*$]"
> →コンパイルはとおりましたが、引数に入力した値をチェックにかけているのですが、
>  引数に [任意の文字] と指定するとうまく動きませんでした。。

"\[.*\]" で、いいのではないでしょうか?

> 「_」で2連続をチェック
> "^_{2}"
> →「_」3以上の連続でもひっかかりました。

"(?<!_)__(?!_)" で、出来ると思います。
(regex でうまくいくかどうかわかりませんが、鬼車で確認しました)

Re:正規表現

Posted: 2009年5月28日(木) 21:32
by ウズ
> 御津凪様
返答ありがとうございます。
regexのせいなのか、ネットで調べたりした内容でも
書いてあるとおりに動かない場合もありました。
私の環境の場合、メタ文字の取り消しは「\\」のようですが、
それでも打ち消せない文字もあったり…。
教えていただいた表現でも試してみます。
ありがとうございました。