[英]Parse String Array of regex values within PHP
我使用它的方式的組合很復雜,我找不到任何關於如何實現它的參考。
我允許用戶在數據庫(MySql)中存儲正則表達式值數組的表示,如下所示:
'["/^\d{5}([\-]?\d{4})?$/i", "/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/i"]'
現在在我的PHP代碼中,我將其讀入變量$val
,它看起來像這樣:
'["/^\\d{5}([\\-]?\\d{4})?$/i", "/^([ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ])\\ {0,1}(\\d[ABCEGHJKLMNPRSTVWXYZ]\\d)$/i"]'
並嘗試利用JSON將其解碼為實際數組:
$val = '{"unq":'.$val.'}';
$obs = json_decode($val);
return $obs->unq;
問題是,我得到Notice: Trying to get property of non-object in...
在$obs->unq;
上Notice: Trying to get property of non-object in...
$obs->unq;
我猜這與正則表達式的存儲方式有關,但我不確定。 感謝您的幫助,浪費了太多時間。
它似乎是你的解析器(mysqli_real_escaped_string或其他東西)不會逃避json字符串中預期的任何結構字符(我猜的unicode字符除外)
正如您可以在JSON RFC中讀到的,應該轉義字符串轉義斜杠 (向前或向后)!
“字符串的表示類似於C系列編程語言中使用的約定”
然后,您可以使用addcslashes來轉義它:
$reg = addcslashes($reg, chr(0x5c)); // hex notation, beware of '\\'
$out = '{"unq":'.$reg.'}';
$out = json_decode($out);
您應該使用本機調試函數(如var_dump和json錯誤處理程序)來確保發生錯誤的位置:
var_dump(json_last_error_msg(), $out);
return $out->unq;
錯誤的方式:
string(12) "Syntax error"
NULL
解決了:
string(8) "No error"
object(stdClass)#1 (1) {
["unq"]=>
array(2) {
[0]=>
string(23) "/^\d{5}([\-]?\d{4})?$/i"
[1]=>
string(86) "/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/i"
}
}
我不知道你的目的,但還有另一種方法來幫助這個存儲之王。 您還可以序列化真正的正則表達式數組
// before saving
$patterns = serialize
([
"/^\d{5}([\-]?\d{4})?$/i",
"/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/i",
]);
// usage out of mysql, unserialize do the tricks
return $patterns = unserialize($sqlressource["patterns"]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.