2016-05-16 67 views
1

所以我試圖檢查匹配,如果匹配,從字符串中提取一個變量名稱。變量名應該以「$」開頭,不能用「\」轉義,所以例如「$ name」應該提取「name」並且「\ $ name」或「name」不應該匹配。繼承人的命令:PHP拒絕這個正則表達式

$match = preg_match("/^(?<!\\)(\$.*)$/", $potential, $name); 

我建造和測試它使用regex101.com和它的作品出現,但是,我碰到PHP說法錯誤

「的preg_match():編譯失敗:缺少)在偏移13英寸...「

我不知道它指的是什麼。

回答

1

我的想法是,你將需要避免某些字符消耗正則表達式在PHP

$match = preg_match('/^(?<!\\\\)(\$.*)$/', $potential, $name);

編輯:反斜槓在兩個正則表達式和PHP轉義字符,則需要加倍逃避斜線。

+1

正確,因此對於正則表達式和字符串格式在PHP? – user81993

+0

是的,反斜槓是PHP和Regex的轉義字符 – Scuzzy

0

你逃脫支架:

preg_match('/^(?<!\\) <----HERE 

僅供參考,您可以使用其他幾個分隔符,讓您的正則表達式的可讀性更強。因爲我們經常使用斜槓和轉義字符,所以使用'/'會導致難以閱讀。考慮使用'#'或'〜'或甚至'@'來提高可讀性。

同時也是您選擇的在線正則表達式工具,它取決於服務使用哪種正則表達式實現(和版本),以及您的結果有多準確。我總是使用rubular.com(使用PCRE),但對於PHP,您可以使用phpliveregex.com