Это интересный результат правил рендеринга текста, предназначенных для прозы, а не кода.
Первый аргумент в вызове вашего метода, как написано выше, это "العسكرية", аргумент, который отображается (*) вПравая сторона.Этот более длинный аргумент является входным параметром, а более короткая подстрока, отображаемая слева, на самом деле является шаблоном, следовательно, соответствует.
(*: это предполагает, что ваш браузер знает, как выполнять рендеринг справа налево.Если вы вставите фрагмент кода в редактор или консоль, в которой нет поддержки сложного текстового макета, вы увидите, какой она есть на самом деле ... хотя арабский язык тогда будет разбит.)
Хитрость заключается в том, что знаки пунктуации, такие как кавычки и запятая, не имеют направления, поэтому могут отображаться слева направо или справа налево в зависимости от их окружения.Логический порядок фрагмента:
>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<
>>
Regex.IsMatch("العسكرية", "العسكري")
(который имеет еще одно запутанное свойство, заключающееся в том, что кавычки, которые появляются вокруг каждого отдельного параметра, на самом деле не являются.)
Это делаетнекоторый спорный смысл для участков читаемого смешанного языка, но делает код очень запутанным!Вы можете остановить это, разбив ряд бессмысленных символов на нечто, имеющее направленность слева направо:
Regex.IsMatch("العسكرية", /* foo */ "العسكري")
Функционально это тот же код, что и оригинал, но он отображается совершенно по-другому.При вводе первой буквы латинского алфавита вы можете наблюдать за позициями мест замены аргументов.