正则表达式需要提取字母和数字并返回一个数组

时间:2018-06-11 11:46:20

标签: regex

需要正则表达式来获取字母和数字。以下示例:

input1 - CCG [50 %]       output1 CCG, 50
input2 - CCG old [59.6%]  output2 CCG old, 59.6
inout3 - NSG [65.43%]     output3 NSG, 65.43

我正在使用函数字符串split。这会将字符串转换为长度为2的数组,这符合我的要求。

我的要求是在split()函数中传递正则表达式。

split("(?<=\\D)(?=\\d)")

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

也许是这样的?

<?php

$string = 'CCG [50 %]
CCG old [59.6%]
NSG [65.43%]';
$pattern = '/(.+?)\s\[(\d+?)(\.?)(\d*?)(\s?)%\]/im';
$replacement = '${1}, ${2}${3}${4}';

echo preg_replace($pattern, $replacement, $string);

结果:

CCG, 50
CCG old, 59.6
NSG, 65.43

答案 1 :(得分:0)

您可能需要匹配要拆分的部分才能匹配:

  • \[(?=\d)一个空格,并打开括号并声明后面的内容是数字
  • |
  • ?%]$匹配可选空格,%和行尾的结束括号

\[(?=\d)| ?%]$

作为使用拆分的替代方法,您可能会匹配要删除的内容并捕获要保留在第一个捕获组中的内容。

在替换中,您可以使用昏迷,然后使用空格,然后使用1组。

<强>匹配

\[(\d+[. ]\d*)%\]

<强>替换

, $1