我想檢查一個字符串,如果它以美元開頭($
)和開放大括號({
)後跟任何東西,但不以結束大括號(}
)結束。正則表達式開始於而不是結束
{$this should match {$this shouldn't march}
我嘗試以下操作:
$regex = '/(^\{\$).*?(?!\\})$/';
這是正確的方法是什麼?
我想檢查一個字符串,如果它以美元開頭($
)和開放大括號({
)後跟任何東西,但不以結束大括號(}
)結束。正則表達式開始於而不是結束
{$this should match {$this shouldn't march}
我嘗試以下操作:
$regex = '/(^\{\$).*?(?!\\})$/';
這是正確的方法是什麼?
我在冒險猜測你的例子是打算成爲兩個單獨的例子,其中一個應該匹配,其中一個應該不匹配。以下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);
?>
感謝您的幫助。我只想知道爲什麼在你的正則表達式中使用[^ {}]/^ {\ $ [^ {}] +(?!})$ /? –
@pavankumar,我正在使用'[^ {}]'因爲我想匹配任何不是'{'或'}'的字符。這似乎是你在你的問題中暗示的,但是如果你不介意額外的'{',那麼你可以將它改爲'[^}]'。 – merlin2011
感謝它的工作! –
你的問題並不完全清楚。好的,一點都不清楚。
$regex = '/(^\{\$).*?(?!\\})$/';
|
double escaping, why?
A lookaround assertion正在檢查模式中特定位置的條件。 (?!\})$
檢查一個位置(?!\})
是否爲真和$
爲真。
這兩個條件在字符串的末尾將始終爲真! ==>你不檢查,如果字符串不以}
結束:
的anchor$
是真實的,如果字符串的結尾是未來,在相同的位置(?!\})
也是如此,因爲沒有提前}
。
爲了測試這種情況下,你要回頭,當發現$
==>
(?<!\})$
你想要哪個格式匹配,到底是什麼? '$ {...'或'{$ ...'?請澄清。 (另外,編輯你的問題的標題。) –
{$ ..但不以' –
結束你想匹配嗎?或者你想從中提取出「{$ this should match'? –