2014-04-17 40 views
-1

我想檢查一個字符串,如果它以美元開頭($)和開放大括號({)後跟任何東西,但不以結束大括號(})結束。正則表達式開始於而不是結束

{$this should match {$this shouldn't march} 

我嘗試以下操作:

$regex = '/(^\{\$).*?(?!\\})$/'; 

這是正確的方法是什麼?

+0

你想要哪個格式匹配,到底是什麼? '$ {...'或'{$ ...'?請澄清。 (另外,編輯你的問題的標題。) –

+0

{$ ..但不以' –

+0

結束你想匹配嗎?或者你想從中提取出「{$ this should match'? –

回答

0

我在冒險猜測你的例子是打算成爲兩個單獨的例子,其中一個應該匹配,其中一個應該不匹配。以下regex可能會做你想做的。

<?php 
$input1 = '{$this should match' ; 
$input2 = '{$this shouldn\'t march}'; 
$regex = '/^{\$[^{}]+(?!})$/'; 

preg_match_all($regex, $input1, $matches); // Will match 
var_dump($matches); 
preg_match_all($regex, $input2, $matches); // Will not match 
var_dump($matches); 
?> 
+0

感謝您的幫助。我只想知道爲什麼在你的正則表達式中使用[^ {}]/^ {\ $ [^ {}] +(?!})$ /? –

+0

@pavankumar,我正在使用'[^ ​​{}]'因爲我想匹配任何不是'{'或'}'的字符。這似乎是你在你的問題中暗示的,但是如果你不介意額外的'{',那麼你可以將它改爲'[^}]'。 – merlin2011

+0

感謝它的工作! –

1

你的問題並不完全清楚。好的,一點都不清楚。

$regex = '/(^\{\$).*?(?!\\})$/'; 
         | 
        double escaping, why? 

A lookaround assertion正在檢查模式中特定位置的條件。 (?!\})$檢查一個位置(?!\})是否爲真$爲真。

這兩個條件在字符串的末尾將始終爲真! ==>你不檢查,如果字符串不以}結束:

anchor$是真實的,如果字符串的結尾是未來,在相同的位置(?!\})也是如此,因爲沒有提前}

爲了測試這種情況下,你要回頭,當發現$ ==>

(?<!\})$