-1

http://www.abc.com/zyx/yxc/asd/?asdという形式の文字列があります

最初の 19 文字としてhttp://www.abc.com/のみを読み取る正規表現を作成したいと考えています。検索文字列がこの場所にない場合、一致するはずがありません。

正規表現で文字列を検索できるけど^[http://www.abc.com]$場所も指定したい

4

3 に答える 3

1

正規表現が複雑に聞こえる場合は、単純な文字列比較を使用できます。何かのようなもの :-

str.index('http://www.abc.com/') == 0

正規表現が必要な場合は、

/^http:\/\/www.abc.com\//
于 2013-01-21T13:30:11.957 に答える
0

文字列正確に で始まることを確認する必要がある場合は、 start_with?'http://www.abc.com/'を使用できます。方法は次のとおりです。

str.start_with? 'http://www.abc.com/'  # => true

とにかく特定の場所で部分文字列を見たい場合は、数値の代わりに範囲を渡すことで [ ] 演算子を使用して取得することに注意してください。

str[0..18] # => 'http://www.abc.com/'

次に、希望の正規表現を次の結果に適用できますstr[0..18]

str[0..18] =~ /some [hard] regex/

ただし、完全一致を確認したい場合start_with?は、ハードコードされた数字が含まれておらず、正規表現を必要としないため、最初の例の方がはるかにエレガントに見えます。

P.s。ボーナス:私にとっては驚きでしたが、[ ] 演算子 (sliceメソッドの同義語) は、数値と数値の範囲だけでなく、文字列部分と正規表現も使用できます。したがってstr[0..18][/some [hard] regex/]、それを行うこともでき、一致した部分またはnil

于 2013-01-21T15:16:22.560 に答える
0

URL を操作する適切な方法は、URL パーサーを使用することです。Ruby の組み込みURIがその役割を果たします。

require 'uri'

uri = URI.parse('http://www.abc.com/zyx/yxc/asd/?asd')

uri.scheme # => "http"
uri.host   # => "www.abc.com"
uri.path   # => "/zyx/yxc/asd/"
uri.query  # => "asd"
'%s://%s' % [uri.scheme, uri.host] # => "http://www.abc.com"

pathには先頭が含まれている/ため、適切なホスト URL には が含まれていないことに注意してください/。必要に応じて、簡単に追加できます。

それでは、使用しようとしている正規表現パターンを見てみましょう。

^[http://www.abc.com]$

これは言います:

  1. 正規表現エンジンは、次の行の先頭を見つける必要があります。^
  2. 次の文字から任意の 1 文字を検索します。"h", "t", "p", ":", "/", "w", ".", "a", "b", "c", "o", "m"
  3. 正規表現エンジンは、文字列の末尾を見つける必要があります。$

つまり、行内の単一の文字を探しています。

于 2013-01-21T17:37:09.590 に答える