首先,我想指出similar question存在与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!
}
}
}
以下是要演示的网络版本:
答案 0 :(得分:0)
[\b]
是一个退格字符匹配模式,仅此而已。
因此,尽管\b
是字符类外部的零宽度单词边界,但在字符类中使用时,它指的是退格字符(ASCII中的0x8
)。 this post中提供了更多详细信息。
维克多:如果您想发表自己的答案,我很乐意接受这一答案。