http://www.abc.com/zyx/yxc/asd/?asdという形式の文字列があります
最初の 19 文字としてhttp://www.abc.com/のみを読み取る正規表現を作成したいと考えています。検索文字列がこの場所にない場合、一致するはずがありません。
正規表現で文字列を検索できるけど^[http://www.abc.com]$
場所も指定したい
http://www.abc.com/zyx/yxc/asd/?asdという形式の文字列があります
最初の 19 文字としてhttp://www.abc.com/のみを読み取る正規表現を作成したいと考えています。検索文字列がこの場所にない場合、一致するはずがありません。
正規表現で文字列を検索できるけど^[http://www.abc.com]$
場所も指定したい
正規表現が複雑に聞こえる場合は、単純な文字列比較を使用できます。何かのようなもの :-
str.index('http://www.abc.com/') == 0
正規表現が必要な場合は、
/^http:\/\/www.abc.com\//
文字列が正確に で始まることを確認する必要がある場合は、 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
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]$
これは言います:
^
"h", "t", "p", ":", "/", "w", ".", "a", "b", "c", "o", "m"
$
つまり、行内の単一の文字を探しています。