2011-01-27 7 views
0

私がスキャンしているものの前には何もない場合にのみスキャンする方法はありますか?正規表現gsubは前に何も持っていない場合のみ

たとえば、投稿があり、フォワードスラッシュをスキャンしています。それに続くものですが、開始文字でない場合はスラッシュをスキャンしたくありません。

私はこれをスキャンしたいと思いますが、これは/ thisまたはhttp://this.comをスキャンしたくありません。私は現在使用している正規表現がある

..

/\/(\w+)/ 

Iは、各/ forwardslashをリンクするGSUBでこれを使用しています。

答えて

3

あなたが求めているのは、 '/'で始まる文字列や行ではなく、 '/'で始まる単語にのみ一致するようにすることだと思います。それが本当であるならば、私は、次の正規表現がうまくいくと信じて:%r{(?:^|\s+)/(\w+)}:たとえば

"/foo /this this/that http://this".scan %r{(?:^|\s+)/(\w+)} # => [["foo"], ["this"]] 
+0

[Rubularでテスト済み](http://rubular.com/r/ZzQAp3YT8Y)、動作します。 +1 – edgerunner

+0

その言葉!ありがとうございました。 – morcutt

2

キャレット(^)文字は「文字列の先頭」を意味します。ドル記号($)は「文字列の末尾」を意味します。
だから、

/^\/(\w+)/ 

...あなたが望むあなたを取得します - だけで文字列の先頭にマッチします。

+3

キャレットとドル記号は、実際には行の先頭と末尾です。真の始まりを文字列の終わり、例えば複数行の文字列にするには、\ Aと\ Zを使います。 –

0

最初のもの、あなたが何か他のものに区切り文字を変更スラッシュで正規表現を使用していることから、あなたはバックスラッシュをエスケープする必要はなく、読みやすくなります。

第2に、スラッシュも置き換えてキャプチャに含めたい場合です。

正規表現をオンにします。

...それは行の先頭 文字...

...でない場合:それは初め 文字でない場合

!^(/\w+)! 

...

...単語の:

!\s(/\w+)! 

しかし、それが行頭にある場合は一致しません。そのためにはもっと複雑なものが必要なので、そのモンスターを作る代わりにここで正規表現を両方実行するだけです。

+0

カムは、より良い正規表現を与えて、それを選ぶ:) – iain

関連する問題