我對 REGEX 足夠了解,但我一直堅持這個。我正在使用 PHP 5.4 到 shell_exec() 一個帶有 REGEX 的 grep 陳述句,以捕獲文本檔案中的 SKU。在 php 中我沒有看到錯誤,但 grep 不起作用。
目標是捕獲此文本中的 SKU:
{'Product_Product_SKU': 'DOP36M94DPM'},
PHP代碼:
$cmdSKU1 = 'grep -Po \'(?<=\{\'Product_Product_SKU\':\s{15}\'). ?(?=\'\}\,)\' '.$FileName;
$chkSKU1 = trim(shell_exec($cmdSKU1));
此外,當我在 IDE 的除錯器工具中查看 $cmdSKU1 變數時,我正在使用它的值是一行:
grep -Po '(?<=\{'Product_Product_SKU':\s{15}'). ?(?='\}\,)' /opt/web/default/RetailerParsing/RetailerDownload/MDD30TMSTH__20220113091043.htm
此外,當我將它粘貼到 Ubuntu 控制臺時,它給了我錯誤:
-bash: syntax eror near unexpected token `)'
即使我回去逃避暴露的單引號。事實上,我逃脫了所有 [^A-Za-z0-9] 只是為了確保!沒有豆子。
最后,如果我嘗試在 PHP IDE 的 REGEX 中雙重轉義單引號,我會在Produce_Product_SKU字樣下得到一個紅色波浪下劃線錯誤。
uj5u.com熱心網友回復:
您沒有正確轉義 shell 命令。而不是手動進行,您應該使用escapeshellarg:
$cmdSKU1 = join(" ", array_map( 'escapeshellarg', array(
?"grep",
?"-Po",
?"(?<={'Product_Product_SKU':\s{15}'). ?(?='},)",
?$FileName
)));
$chkSKU1 = trim(shell_exec($cmdSKU1));
也就是說,為什么不直接使用preg_match并保存對非 POSIX 外部命令的呼叫呢?
$string = "{'Product_Product_SKU': 'DOP36M94DPM'},";
preg_match("/{'Product_Product_SKU':\s{15}'([^'] )'}/", $string, $matches);
var_dump($matches[1]);
string(11) "DOP36M94DPM"
當然,您必須閱讀 php 中的檔案,但它可能值得額外的代碼。
uj5u.com熱心網友回復:
您在這里根本不需要正則運算式,當然也不需要 shell_exec。只需拆分'并從結果陣列中取出第 4 個(0 索引)值:
$str = "{'Product_Product_SKU': 'DOP36M94DPM'},";
$sku = explode("'", $str)[3];
var_dump($sku);
產量:
string(11) "DOP36M94DPM"
另請注意,PHP 5.4 已于 6 年前停止使用。你真的應該更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413737.html
標籤:
上一篇:搜索和重命名檔案
下一篇:回圈查詢的輸出
