Для начала хотелось бы отметить, что аналогичный вопрос существует с ответами и обходными путями, специфичными для PHP.Я вижу эту проблему в C #, и я хотел бы понять логику этой очевидной «ошибки».
Символ границы слова \b
, кажется, не работает должным образом, когда помещается в набор Regex
(он же «квадратные скобки»: []
).Это синтаксическая проблема, преднамеренно ли исключены границы слов из сопоставления множеств или есть какое-то другое объяснение, которое я пропускаю?
Вот программа, демонстрирующая проблему:
namespace TestProgram
{
using System.Text.RegularExpressions;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
var text = "[abc]";
var BaselineRegex = new Regex(@"(?:\b)(abc)");
Debug.Assert(BaselineRegex.IsMatch(text)); // Assertion Passes
var BracketRegex = new Regex(@"(?:[\b])(abc)");
Debug.Assert(BracketRegex.IsMatch(text)); // Assertion Fails!
}
}
}
Вот веб-версии для демонстрации:
Граница слова, выполняемая, как и ожидалось, без скобок: ( ссылка )
Граница слова, не совпадающая при нахождении в скобках: ( ссылка )