答えて
投稿した内容が実際には逆転していると思われます。短いテキストは実際はパターンであり、長い入力は入力と照合されます。その場合、パターンは単語の最後の文字以外のすべてと一致するため、これはtrueを返します。
العسكري
がパターンであり、العسكرية
が入力です。私はアラビア語を知っているので、後者は実際には前者と部分的に一致していると言えるので、値が実際には逆になっても結果は真です。 this table of Arabic alphabetsを参照すると、y''(表の一番下にある)という文字が問題の同じ文字であることがわかります。その出現は、単語の中でどこに出現するかに依存する。前者の言葉では、最後に現れ、後者では2番目に手紙です。
投稿からコピー/貼り付けすると、値が逆になり、真の値になります。このより良いで動作するように、我々は両方のシナリオで期待どおりの結果を見るために離れて単語を分割することができます。
string first = "العسكري";
string second = "العسكرية";
Console.WriteLine(Regex.IsMatch(first, second)); // false
Console.WriteLine(Regex.IsMatch(second, first)); // true
全体ではなく、文字列こと、Regex.IsMatch()
は、文字列の正規表現の発生があるかどうかを伝えているようです正規表現にマッチします(ドキュメントによると "Indicates whether the specified regular expression finds a match in the specified input string.")。最初の引数は入力であり、もう1つはドキュメントに従ったパターンですが、ここでは逆の方法があります。最後の(一番左の)文字は2つの文字列の中の異なる文字のように見えますが、おそらく合字がレンダリングされるためです。 UTF-8バイトとしてダンプすると、文字列は次のとおりです。
d8 a7 d9 84 d8 b9 d8 b3 d9 83 d8 b1 d9 8a
と
d8 a7 d9 84 d8 b9 d8 b3 d9 83 d8 b1 d9 8a d8 a9
ので、最初は、実際の引数の順序のために(それが必要ない試合を説明するだろう他の部分文字列であります実際にドキュメントの内容と逆にする)。
ICK!バイトを表示しない、 'Regex.IsMatch(" \ x {627} \ x {644} \ x {639} \ x {633} \ x {643} \ x {631} \ x { 64A} \ x {643} \ x {623} \ x {643} \ x {643} \ x {643} \ N {アラビア語のレット} \ N {アラビア語のレター} \ N {アラビア語のレター} \ N {アラビア語のレット} \ N {アラビア語のレット} \ N \ N {アラビア語のレター} \ N {アラビア語のレター} \ N {アラビア語のレター} \ N {アラビア語のレターの名前} \ N {アラビア語のレターの名前} \ N {アラビア語のレターの名前} KAF} \ N {アラビア語レター} \ N {アラビア語レターYEH} ")。これらのフォームを表示するための簡単なツールがあります。 – tchrist
これは、コードではなく散文用に設計されたテキストレンダリングルールの興味深い結果です。
上記のように、メソッド呼び出しの最初の引数は、右側にレンダリングされる引数(*)である "العسكرية"です。このより長い引数は入力であり、左に表示される短い部分文字列は実際にはパターンなので一致します。
(*:これは、ブラウザが右から左へのレンダリングを行う方法を知っていることを前提としています。複雑なテキストレイアウトのサポートを持たないエディタまたはコンソールにコードスニペットを貼り付けると、
トリックは、引用符やコンマのような句読点は方向がないため、左から右または右から左にレンダリングすることができますその周囲に応じて。スニペットの論理的な順序は次のとおりです。
>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<
>>
Regex.IsMatch("العسكرية", "العسكري")
(それぞれ別々のパラメータの周りのように見える引用符は、実際にはないことをさらに紛らわしい性質を有しています。)
これは、可読性の高い混在言語の拡張について、ある種の議論の余地がありますが、コードは非常に混乱します。
Regex.IsMatch("العسكرية", /* foo */ "العسكري")
これは、機能的にオリジナルと同じコードですが、それは全く異なる表示されます。あなたはそれを左から右にいるの方向何かで方向性の文字の実行を壊すことで起こって停止することができます。最初のラテン文字を入力すると、引数の位置を見ることができます。
- 1. なぜこの正規表現はtrueを返しますか?
- 2. JavaScriptの正規表現はfalseを返しますが、正規表現のテスターはtrueを返します
- 3. なぜこの正規表現はスペースをキャプチャしますか?
- 4. なぜ私はこの正規表現を書いたこの正規表現
- 5. python正規表現がtrue/falseを返します
- 6. なぜこの正規表現は一致しませんか?
- 7. なぜこの正規表現は機能しませんか?
- 8. なぜこの正規表現は機能しませんか?
- 9. なぜこの正規表現は機能しませんか?
- 10. なぜこの正規表現は一致しませんか?
- 11. なぜこの正規表現は機能しませんか?
- 12. なぜこの正規表現は機能しませんか?
- 13. 正規表現/d/.test()がtrueを返すのはなぜですか?引数なしのテスト関数
- 14. この比較はなぜ戻りますか? (正規表現)
- 15. なぜこのJava正規表現はfalseを返すのですか?
- 16. Ruby、True/false正規表現
- 17. なぜ私の日付は正規表現でfalseを返しますか?
- 18. なぜこれらの文字はこのElixir正規表現の正規表現に必要ですか?
- 19. なぜこの正規表現は機能しませんか?ここ
- 20. この正規表現はなぜ高速ですか?
- 21. なぜこの正規表現は正しく出力されませんか?
- 22. なぜですか。正規表現
- 23. jflex:なぜこの正規表現は一致しますか?私のレクサーで
- 24. なぜ正規表現はStackOverflowの
- 25. 正規表現は機能しません、なぜですか?
- 26. Ruby:equalsが正規表現の正規表現でなぜ解析エラーを引き起こすのですか?
- 27. この正規表現は何を実現しますか?
- 28. 正規表現正規表現と異なるハイブ正規表現ですか?
- 29. なぜこの正規表現にスペースが必要ですか?
- 30. Python。正規表現。無効な正規表現:複数の繰り返し
私はアラビア語に慣れていませんが、 'new CultureInfo( "ar")、CompareInfo.IsPrefix'、 "new CultureInfo(" ar ")のどちらでもありません。CompareInfo.IsSuffix'は2つの文字列に対して' true'を返します。 。 – dtb
@dtb奇妙なことに私がOPの投稿から貼り付けると、私が言ったように値は逆になり、部分一致が得られます。 –
@dtbこれは、私のサンプルコードの変数を使用してtrueになります: 'new CultureInfo(" ar ")。CompareInfo.IsPrefix(second、first)' - あなたはそれを取得しますか? –