例如,對於該字符串,正則表達式:匹配的空格不包含在[]
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