输入:
"a[href*=\"测试\"]"
我正在尝试从以下 jQuery 选择器中匹配标签名称:
Regex r = new Regex("^[A-z]+");
string tagName = r.Match("a[href*=\"test\"]").Value;
问题是它收集了左括号,而不仅仅是 A 到 z:
tagName = "a[href"
如果表达式中没有指定括号,它为什么要收集括号?
输入:
"a[href*=\"测试\"]"
我正在尝试从以下 jQuery 选择器中匹配标签名称:
Regex r = new Regex("^[A-z]+");
string tagName = r.Match("a[href*=\"test\"]").Value;
问题是它收集了左括号,而不仅仅是 A 到 z:
tagName = "a[href"
如果表达式中没有指定括号,它为什么要收集括号?
这是因为这个
[A-z]
创建从 ASCII 'A' 到 ASCII 'z' 的字符范围。Z和a之间还有字母以外的字符,其中之一就是[
字符。改用:
[A-Za-z]
匹配范围 fromA-Z
和范围 from a-z
,但不匹配它们之间的字符。您可以查看ASCII 表以了解具体信息,但总结是字符(按其数字 ASCII 顺序)如下所示:
A, B, ..., Y, Z, [, \, ], ^, _, `, a, b, c, ..., z
你应该尝试像 regexpal 这样的工具来测试这样的东西。这是您的示例:
http://regexpal.com/?flags=g®ex= ^%5BA-z%5D%2B&input=a%5Bhref*%3D%5C%22test%5C%22%5D
对我来说奇怪的是小写的“z”——出于某种原因,它允许括号通过。
试试这个:
^[^\[]+
http://regexpal.com/?flags=g®ex= ^%5B^%5C%5B%5D%2B&input=a%5Bhref*%3D%5C%22test%5C%22%5D