我有這些文本行($text 變數)
CC 1,00
SS 1,00
PP 1,00
1,00
FF 1,00
現在我只想將每行的數字部分回傳給我。但重要的是我不必使用以某些字符開頭的行,例如我想排除“SS”、“PP”和“FF”。所以我希望它只回傳“CC”的值,只回傳沒有前導字符的數字值。
與此同時,我已經這樣做了,但它似乎不起作用
preg_match_all("/((?!.SS|.FF|.PP).*\d{1,2}[\,\.]{1}\d{1,2})\w /", $text, $matches);
不幸的是,我沒有得到想要的結果,我錯在哪里?謝謝
uj5u.com熱心網友回復:
我將您的正則運算式修改為:^(?!SS|FF|PP).*(\d{1,2}[,.]\d{1,2})
在這里測驗:https ://regex101.com/r/SAivli/2
$re = '/^(?!SS|FF|PP).*(\d{1,2}[,.]\d{1,2})$/m';
$str = 'CC 1,00
SS 1,00
PP 1,00
1,00
FF 1,00';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
print_r($matches);
//Array ( [0] => Array (
// [0] => CC 1,00
// [1] => 1,00
// )
// [1] => Array ( [0] => 1,00
// [1] => 1,00
// )
// )
這匹配兩個數字:
- 從 CC 開始
- 沒有任何前導字母字符
uj5u.com熱心網友回復:
您可以將否定前瞻錨定到字串的開頭,并在.SS匹配單個字符時省略前導點。
您也可以省略中的{1}和反斜杠[\,\.]
由于示例中除了空格和 2 個大寫字符之外沒有其他字符,您可以更改.*為 match [A-Z]{2},后跟可選的水平空白字符\h*
省略\w 最后的,因為沒有更多的單詞字符,并且 至少需要一個字符。
^(?!SS|FF|PP)[A-Z]{2}\h*\K\d{1,2}[,.]\d{1,2}$
^字串的開始(?!SS|FF|PP)斷言沒有任何替代的權利[A-Z]{2}匹配 2 個大寫字符\h*\K匹配可選的空白字符并忘記到目前為止匹配的內容\d{1,2}[,.]\d{1,2}.匹配 1-2 位數字,后跟,1-2 位數字$字串結束
正則運算式演示
$re = '/^(?!SS|FF|PP)[A-Z]{2}\h*\K\d{1,2}[,.]\d{1,2}$/m';
$text = 'CC 1,00
SS 1,00
PP 1,00
1,00
FF 1,00';
preg_match_all($re, $text, $matches);
print_r($matches[0]);
輸出
Array
(
[0] => 1,00
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444962.html
