我创建了一个有效的PCRE正则表达式(用于查找邮政信箱地址条目),它在C#中抛出了解析器错误。
错误是因为" \。"和" \ s"我模式中的人物。
错误是:"文字字符无效"
这是正则表达式
^(?!.*p\.?o\.?\s+?box).*$
以下是实施
[RegularExpression("^(?!.*p\.?o\.?\s+?box).*$", ErrorMessage = "We cannot ship to PO boxes")]
有人会帮我解决这个问题吗?
由于
答案 0 :(得分:7)
这是因为反斜杠。把你的正则表达式作为逐字字符串文字。双引号内的单反斜杠将被视为转义序列。
@"^(?!.*p\.?o\.?\s+?box).*$"
逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。一个简单的例子是@"你好"。在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理。逐字字符串文字可以跨越多行。
答案 1 :(得分:1)
因为反斜杠被视为转义字符,您需要将字符串作为逐字字符串:
@"^(?!.*p\.?o\.?\s+?box).*$"
或者你需要放两个反斜杠而不是像下面那样:
"^(?!.*p\\.?o\\.?\\s+?box).*$"