string.start_with?から同じ結果を取得しますか?および文字列[]

vrintle

基本的には、上記の両方の方法を使用mainして、文字列()が別の文字列()で始まるかどうかを確認したいと思いsubます。たとえば、私のコードは次のとおりです。

main = gets.chomp
sub = gets.chomp

p main.start_with? sub
p main[/^#{sub}/]

そして、これがI / Oの例です-オンラインで試してみてください!


単純な文字列を入力すると、どちらもまったく同じように機能"1\2"ますが、のよう文字列を入力するとstdin、TIOの例に示すように、正規表現バリアントでエラーが発生します。

これは、2番目に渡された文字列が生ではないためだと思います。だから、私はsub.dump2番目のものに渡しみました-オンラインで試してみてください!

それは私にnil結果を与えますこれを正しく行う方法は?

イェルクW正午

原則として、信頼できないソースからの入力を盲目的に実行してはなりません

信頼できない入力をaにRegexp補間することは、たとえば、に補間することほど悪くはありません。Kernel#eval攻撃者がaRegexp実行できる最悪のことは正規表現のサービス拒否(ReDoS)攻撃を実行するためにEvil Regex構築することです(上のセクションパフォーマンスドキュメントが)、とのに対し、彼らは/ PIIとexfiltrateを含むがこれらに限定されない、ファイルシステム全体を削除する、暗号化されていないパスワード/クレジットカード情報のためのメモリをスキャンし、任意のコードを実行する可能性があり、そのネットワークを経由して、などRegexpeval

しかし、それはまだ悪い考えです。たとえば、私はにはバグが存在しないことを前提とし、「起こる最悪の事態がReDoSである」と言ったときにRegexp(実施Onigmoの場合はYARVジョニの場合はJRubyTruffleRubyはRubyのなど、)Regexpsは非常に強力であるため、Onigmo、Joniなど。は大きくて複雑なコードであり、特別に細工されたによって使用される可能性のある独自のセキュリティホールがある可能性がありますRegexp

あなたは適切にサニタイズし、ユーザー入力をエスケープする必要があります前に構築しますRegexpありがたいことに、Rubyコアライブラリには、まさにそれを実行するメソッドがすでに含まれていますRegexp::escapeしたがって、次のようなことができます。

p main[/^#{Regexp.escape(sub)}/]

使用しようとしてもString#dumpうまくいかなかった理由String#dumpStringStringリテラルとして記述しなければならないのと同じ方法で表現するためです。つまりString、メタ文字ではなくRegexpメタ文字エスケープし、Stringその周りに引用符を含めます。Stringリテラルとして認識させる必要があります。試してみると、簡単にわかります。

sub.dump
#=> "\"1\\\\2\""
# equivalent to '"1\\2"'

つまり、それは String#dump

  • 引用符が含まれています(これは不要です)、
  • s(egまたは)でRegexpエスケープする必要があるという理由だけでエスケープする必要のない文字をエスケープしString#"
  • しないでエスケープする必要はありません文字エスケープString秒(例えば[.?*+^-)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

List <List <string >>から同じ請求書を取得します

分類Dev

string [0]文字列から最初の文字を取得します

分類Dev

PHP:StringのようなPython辞書から文字列を取得します

分類Dev

String.Encoding.utf16およびString.Encodingを実行します。utf16BigEndianは同じこと、つまりUTF16BigEndianを意味しますか?

分類Dev

Observable <string>から文字列を取得します

分類Dev

std :: move on std :: stringは、.c_str()が同じ結果を返すことを保証しますか?

分類Dev

.ToHashsetの結果を(Of Char)から(Of String)に変換しますか?

分類Dev

このエラーが発生するのはなぜですか:結果の値は 'ですか?: '式のタイプが一致していません' [String]? ' および「文字列」

分類Dev

TypeSafeConfigおよびPureConfig-configからMap [String、Any]値をロードします

分類Dev

JBOSSDroolsによるList <String>から文字列を取得する方法

分類Dev

string.replaceに関する同じコードは、Firefoxとchromeで異なる結果を取得します

分類Dev

DjangodrfはAndroidからList <String>を取得しますが、これは文字列です

分類Dev

オフセットを使用して文字列の日付をDateTimePST(String)およびDateTimeLocal(String)に変換しますか?

分類Dev

Swift 4:組み込みのString.hashValueは、異なる文字列に対して同じ結果を生成します

分類Dev

文字列をファイルに保存してからString変数にロードすると、まったく同じ名前のように見える「異なる」文字列が得られます。

分類Dev

Java-なぜString(a).getBytes()== aが同じ結果をもたらさないのですか?

分類Dev

std :: hash <std :: string>は異なる文字列に対して同じ値を返すことができますか?

分類Dev

String []のArrayListから文字列を出力しますか?

分類Dev

同じ文字列変数をstring []に変換します

分類Dev

String androidから最初と最後の文字(数字)を取得します

分類Dev

同じハードコードされた文字列リテラルからstd :: stringとstd :: wstringを初期化します

分類Dev

SQLiteからArrayList <String>を取得します

分類Dev

特定の文字列がList <string>に存在するかどうか、およびリストからインデックスを削除しないかどうかを確認するにはどうすればよいですか?

分類Dev

文字列をstring []に変換してから、string []をbyte []に変換します

分類Dev

string.Replace(string、string)は追加の文字列を作成しますか?

分類Dev

String.getBytes( "UTF-16")は、すべてのプラットフォームで同じ結果を返しますか?

分類Dev

String.getBytes( "UTF-16")は、すべてのプラットフォームで同じ結果を返しますか?

分類Dev

List <string>から文字列の一部を削除します

分類Dev

Futrue <String>からFutureBuilderおよびSwitchステートメントへの文字列

Related 関連記事

  1. 1

    List <List <string >>から同じ請求書を取得します

  2. 2

    string [0]文字列から最初の文字を取得します

  3. 3

    PHP:StringのようなPython辞書から文字列を取得します

  4. 4

    String.Encoding.utf16およびString.Encodingを実行します。utf16BigEndianは同じこと、つまりUTF16BigEndianを意味しますか?

  5. 5

    Observable <string>から文字列を取得します

  6. 6

    std :: move on std :: stringは、.c_str()が同じ結果を返すことを保証しますか?

  7. 7

    .ToHashsetの結果を(Of Char)から(Of String)に変換しますか?

  8. 8

    このエラーが発生するのはなぜですか:結果の値は 'ですか?: '式のタイプが一致していません' [String]? ' および「文字列」

  9. 9

    TypeSafeConfigおよびPureConfig-configからMap [String、Any]値をロードします

  10. 10

    JBOSSDroolsによるList <String>から文字列を取得する方法

  11. 11

    string.replaceに関する同じコードは、Firefoxとchromeで異なる結果を取得します

  12. 12

    DjangodrfはAndroidからList <String>を取得しますが、これは文字列です

  13. 13

    オフセットを使用して文字列の日付をDateTimePST(String)およびDateTimeLocal(String)に変換しますか?

  14. 14

    Swift 4:組み込みのString.hashValueは、異なる文字列に対して同じ結果を生成します

  15. 15

    文字列をファイルに保存してからString変数にロードすると、まったく同じ名前のように見える「異なる」文字列が得られます。

  16. 16

    Java-なぜString(a).getBytes()== aが同じ結果をもたらさないのですか?

  17. 17

    std :: hash <std :: string>は異なる文字列に対して同じ値を返すことができますか?

  18. 18

    String []のArrayListから文字列を出力しますか?

  19. 19

    同じ文字列変数をstring []に変換します

  20. 20

    String androidから最初と最後の文字(数字)を取得します

  21. 21

    同じハードコードされた文字列リテラルからstd :: stringとstd :: wstringを初期化します

  22. 22

    SQLiteからArrayList <String>を取得します

  23. 23

    特定の文字列がList <string>に存在するかどうか、およびリストからインデックスを削除しないかどうかを確認するにはどうすればよいですか?

  24. 24

    文字列をstring []に変換してから、string []をbyte []に変換します

  25. 25

    string.Replace(string、string)は追加の文字列を作成しますか?

  26. 26

    String.getBytes( "UTF-16")は、すべてのプラットフォームで同じ結果を返しますか?

  27. 27

    String.getBytes( "UTF-16")は、すべてのプラットフォームで同じ結果を返しますか?

  28. 28

    List <string>から文字列の一部を削除します

  29. 29

    Futrue <String>からFutureBuilderおよびSwitchステートメントへの文字列

ホットタグ

アーカイブ