正規表現の否定先読みで、複数の否定文字列を指定する方法はありませんか?

例えば、
/(a)(?!bbb)/
は、後ろにbbbが続かないaを意味すると思いますが、
後ろにbbb、ccc、dddのいずれもが続かないaを表現する方法を探しています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

単純に


/a(?!bbb|ccc|ddd)/
じゃダメなんだっけ?

この回答への補足

/a(?!(bbb|ccc|ddd))/
で、うまくいきました。ヒントをありがとうございました。

補足日時:2010/04/27 22:59
    • good
    • 1
この回答へのお礼

ありがとうございます。
やってみましたが、それではダメなようです…。

お礼日時:2010/04/27 22:22

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Q正規表現。行頭が○○以外にマッチさせたい。

正規表現を勉強しています。行頭がxyzという文字列以外をマッチさせたいと思っています。行頭にマッチさせるには"^xyz"と理解できます。[^xyz]とやるとx,y,z以外の文字列にマッチするのもわかります。ただ、これだと

123 xyz

の文字にもマッチしていまいます。行頭がxyzで続く文字列以外にマッチさせる正規表現はどうかけばよろしいでしょうか?

Aベストアンサー

パターンを使うんでしょうね。 → ^(?!xyz)
Excelマクロでの実験プログラム
Dim A, P$
Set A = CreateObject("VBScript.RegExp")
A.Global = True
A.IgnoreCase = True
P = "^(?!xyz)"
A.Pattern = P
Debug.Print A.Test("xyz123") '★(1)
Debug.Print A.Test("123xyz") '★(2)
(1)先頭が「"xyz"以外」という条件に反するのでFalse
(2)先頭が「"xyz"以外」という条件に合うのでTrue

http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

Q「指定文字列を含まない行」を指定する正規表現

正規表現で指定した文字列を"含まない"行を指定する方法はありますでしょうか。
例えば、

ABDDDDG
ABEEEEG
ABFFFFG
ABXXXXG
ABHHHHG

とある場合、「XXXX」を含まない行、という指定をして他の4行を指定したいのです。

Aベストアンサー

ANo1さんも仰られているとおり、御自身で開発されるのであればプログラム言語側の判別で振り分けたほうが良いと思います。
ただ其れとは別に特定ツールの機能内で何とかしたい等、「どうしても正規表現で」ということであればで一例を記載しますが・・・おすすめはしません。

# 基本形
# 空行(というか、改行のみ)だろうとマッチ
# 否定先読みによって、「弾きたい文字列の表われない行の行頭」にマッチさせています。
/^(?!.*XXXX)/
http://ideone.com/TFsXh

# 応用例
# 空行(というか、改行のみ)はマッチ除外
/^.(?!.*XXXX)/
http://ideone.com/XvywR

<おまけ>
否定戻り読みはPCRE系でも利用できない物が多く感じる為省きました。
最後に再掲しますが、この手法をお勧めはしません。

Qsedで正規表現の後方参照を使いたい。

後方参照の練習をしようとしています。
1111:2222:3333:4444
5555:6666:7777:8888

というファイルを:でフィールドを区切って1列目と2列目を
sedをつかってひっくり返そうとしました。

sed 's/^(\d{4}):(\d{4})/^$2:$1/' test.file
などいろいろやってみたのですがうまくいきません。
良ければ教えてください。

Aベストアンサー

伝統的には、grep コマンドでつかうのが「正規表現」、egrep コマンドで使うのが「拡張正規表現」で、Perl等のは拡張正規表現のさらに拡張になってます。
すでに出ているように、( | ) { } 等が文字そのままの意味なのか正規表現の特殊文字なのかの切り替えに \ をつけるかつけないかなどが違います。

ここにまとめられています。
http://www.kt.rim.or.jp/~kbk/regex/regex.html

Q正規表現について(最後にマッチした以降のデータ取得)

以下の文字列から、最後の「\」以降の文字列を取得する方法を
教えていただけますでしょうか。

D:\PROGRAM\ANALYZE\LAN\data0123.dat

この文字列から、「data0123.dat」を取り出したい。
「data0123.dat」の部分は、拡張子含めていろいろ変わります。

よろしくお願いいたします。

Aベストアンサー

もっとスマートな式があるかもしれませんが
my $S = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
## 正規表現
$S =~ m/.*\\([^\\]+)$/;
print $1;
ただし、ファイルパスを見るとDOS(Windows)環境のようですので環境はShift-JIS。
全角文字が混ざった場合には正規表現が正常動作する保障がありません。
正規表現の練習なら良いのですがこの程度の処理なら組み込み関数使った処理のほうが効率が良いと思います。
## 組み込み関数
print substr($S,rindex($S,"\\")+1);
ほかにも書き方はあります。

Q「以降」ってその日も含めますか

10以上だったら10も含める。10未満だったら10は含めない。では10以降は10を含めるのでしょうか?含めないのでしょうか?例えば10日以降にお越しくださいという文があるとします。これは10日も含めるのか、もしくは11日目からのどちらをさしているんでしょうか?自分は10日も含めると思い、今までずっとそのような意味で使ってきましたが実際はどうなんでしょうか?辞書を引いてものってないので疑問に思ってしまいました。

Aベストアンサー

「以」がつけば、以上でも以降でもその時も含みます。

しかし!間違えている人もいるので、きちんと確認したほうがいいです。これって小学校の時に習い以後の教育で多々使われているんすが、小学校以後の勉強をちゃんとしていない人がそのまま勘違いしている場合があります。あ、今の「以後」も当然小学校の時のことも含まれています。

私もにた様な経験があります。美容師さんに「木曜以降でしたらいつでも」といわれたので、じゃあ木曜に。といったら「だから、木曜以降って!聞いてました?木曜は駄目なんですよぉ(怒)。と言われたことがあります。しつこく言いますが、念のため、確認したほうがいいですよ。

「以上以下」と「以外」の説明について他の方が質問していたので、ご覧ください。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=643134

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qダブルクォーテーションを含む正規表現について。

正規表現によるマッチング(?)を勉強しています。

例えば「blog」という文字列で、マッチングを試みる場合は、
String str = "blog";
で、strに格納すると思うのですが、例えば「link rel=""」という文字列でマッチングを試みる場合はどうすればいいのでしょうか?
「""」の部分をそのまま文字列のダブルクォーテーションの中に入れると、エラーになってしまうので、何か別のやり方が必要だと思うのですが、わかりません…。

Aベストアンサー

もとい

”abc"abc”は”abc\"abc”と記述します

QVBAでfor文の中で、continueしたい

お世話になります。
VBAのfor文の中で、ある条件に合致したら、for の先頭に戻りたいのですが、
方法が分かりません。

VB.net 等の「 Continue For」に当たるものは、VBAに
ないのでしょうか?

何卒宜しくお願いします。

Aベストアンサー

Continue For は昔の VB6 までに物には実装されていませんね VB6 使いの私は知らなかった

for の先頭に戻りたいのではなく、 Next の直前に飛びたいのですよね?
幸いにも VBA には Goto ステートメントがありますので

Sub Sample1()
For i = 1 To 10
If 意除外条件 Then GoTo Next_no_mae

通常の総理

Next_no_mae:

Next i

End Sub

じゃダメですか?
これなら For の直後に飛ぶ事も可能ですが

もしくはこれぐらいしか対処方法はないのでは?
Sub Sample2()

For i = 1 To 10
If 除外条件 Then
Else
通常の総理
End If
Next i

End Sub

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報