例如,对于该字符串,正则表达式:匹配的空格不包含在[]
div.img-wrapper img[title="Hello world"]
我要匹配的第一空间,但不是所述第二空间(被封装在[]) 。什么是正则表达式?
例如,对于该字符串,正则表达式:匹配的空格不包含在[]
div.img-wrapper img[title="Hello world"]
我要匹配的第一空间,但不是所述第二空间(被封装在[]) 。什么是正则表达式?
以下表达式将通过使用前瞻断言来完成工作。
_(?>[^[\]]*(\[|$))
下划线代表一个空格。此表达式不支持嵌套括号,因为正则表达式不足以表达嵌套匹配结构。
_ Match the space and
(?> assert that it is not inside brackets
[^[\]]* by matching all characters except brackets
( followed by either
\[ an opening bracket (a space inside brackets
will have a closing bracket at this position)
| or
$ or no more characters (end of line).
)
)
UPDATE
下面是一个使用负先行断言另一个(更漂亮)的解决方案。
_(?![^[\]]*])
它断言空格后的下一个括号不是右括号。
_(?![^ [\]] *])上尝试,我会检测所有空间。它可以断言_没有跟随],但它可以断言它没有前面的[。但无论如何,它服务于这个建议。我只是想知道如何将lookahead断言与lookbehide断言结合起来 – powerboy 2010-05-23 19:13:15
没有打开括号的断言背后的负面看法必须是类似于(?<!\\ [[^ [\\\]] *),但是如果我正确记得使用+和*不允许放在断言之后。因此,可能不可能在断言后面使用否定的外观来检查没有左括号。 – 2010-05-23 19:20:27
不匹配(拆分?)空间。相反,匹配它的否定。
(?:(?:\[[^\]]*\])|\S)+
这不是为了匹配所有的CSS选择器,只是你的例子。你应该得到一个CSS解析器来获得可靠的结果。
实际上,如果我在http://www.regextester.com/index2.html – 2010-05-23 19:23:31
需要CSS解析器? – kennytm 2010-05-23 18:35:14
类别。我正在使用xpath转换器的CSS选择器。 Zend框架附带一个CSS选择器到xpath转换器,但是它很麻烦。 – powerboy 2010-05-23 18:38:36