我有这个正则表达式:
/(?:\-?[0-9a-zA-Z]+(?:\.?[0-9a-zA-Z]+)?+[\+\-\*\/\<\>\=])+\-?[0-9a-zA-Z]+(?:\.?[0-9a-zA-Z]+)?/
问题是我需要这个表达式可以解码的n组,但我不知道如何更改它。
我使用https://regex101.com/进行编辑,并删除导致表达式无法正确匹配的?:
。
常规输入类似于1+2-b*4/c or 1+a=3-b
。
我需要的答案就像是
full match[0] = 1+a=3-b
group[1] = '1'
group[2] = '+'
group[3] = 'a'
group[4] = '='
group[5] = '3'
group[6] = '-'
group[7] = 'b'
答案 0 :(得分:1)
你可以简单地简化那个表达式。另请注意,角色类中实际需要转义的唯一字符是-
,将其移动到第一个/最后一个字符具有相同的效果。这个正则表达式应该完成你的目标:
[a-z]+|(?:\d+(?:\.\d+)?)|[-+/*=]
搜索连续(至少1个)小写字母字符,连续数字(带小数可能性)或任何(大多数?)数学运算。由于这些单独的规则,每个查找将是一个匹配。
PHP用法:
foreach(array('12.3+22-this*4/varable','1+a=3-b') as $equat) {
preg_match_all('~[a-z]+|(?:\d+(?:\.\d+)?)|[-+/*=]~', $equat, $matches);
print_r($matches[0]);
}
PHP演示:https://eval.in/727124
正则表达式演示:https://regex101.com/r/0mTL6d/1