sed to php preg_match regex
我有这个字符串:
1 2 3 | $str ="Samples read: 2748264 Length (seconds): 31.159456 Scaled by: 2147483647.0"; |
在命令行上,如果我想在"长度(秒)"之后提取值:我可以像这样使用sed:
1 | sed -n 's#^Length (seconds):[^0-9]*\\([0-9.]*\\)$#\\1#p' |
如何将其重新格式化为php \\的正则表达式匹配格式?我只需要长度(秒)之后的数字即可:(如果存在)。
1 2 |
您需要更改的内容:
- 反转括号的转义;
-
用您要匹配的组中的点(
. )引号(否则它将匹配任何字符);我认为它也应该用sed 引用; -
更改
^ 和$ 锚点以匹配输入文本(在行的开头具有空格字符),或确保要匹配的字符串(Length )始终出现在行的开头在输入文本中(无填充);我在行的开头添加了一个非捕获组((?:\\s*) )来匹配零个或多个空格字符; -
添加
m 修饰符(multi-line ),以允许^ 和$ 在行的开头和结尾匹配;没有它,它们仅匹配输入字符串的开头和结尾。
代码:
1 2 3 4 5 6 7 8 | $str ="Samples read: 2748264 Length (seconds): 31.159456 Scaled by: 2147483647.0"; $matches = array(); if (preg_match_all('#^(?:\\s*)Length \\(seconds\\):[^0-9]*([0-9\\.]*)$#m', $str, $matches)) { var_dump($matches[1]); } |
输出为:
1 2 3 4 |
如果知道要匹配的字符串在输入字符串中仅出现一次(或者如果仅想匹配其首次出现),则可以使用