Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-regex在表达式中格式化运算符_Php_Regex - Fatal编程技术网

php-regex在表达式中格式化运算符

php-regex在表达式中格式化运算符,php,regex,Php,Regex,我需要获取字符串中的所有运算符(算术、比较、逻辑…) ((value+10)*10)>=300 || (array[key]-20==0&&"foo==bar"!=="") …并在它们之前和之后添加一个空格(如果不存在) …忽略引号或单引号之间的内容 传统规则: 仅在预输入/减量运算符之前添加空格 仅在post in/减量运算符之后添加空间 听起来很简单,但我不知道如何在PHP中使用正则表达式。如果有人能帮忙,谢谢 我正在尝试做一些类似于$str=preg_r

我需要获取字符串中的所有运算符(算术、比较、逻辑…)

((value+10)*10)>=300   ||   (array[key]-20==0&&"foo==bar"!=="")
…并在它们之前和之后添加一个空格(如果不存在)

…忽略引号或单引号之间的内容

传统规则:

  • 仅在预输入/减量运算符之前添加空格
  • 仅在post in/减量运算符之后添加空间
听起来很简单,但我不知道如何在PHP中使用正则表达式。如果有人能帮忙,谢谢


我正在尝试做一些类似于
$str=preg_replace(')(?这个模式适用于PCRE引擎,我相信php就是这样

"[^"\r\n]*"(*SKIP)(*F)|\s*([\-\/+*=|<>!&]+)\s*
“[^”\r\n]*”(*跳过)(*F)|\s*([\-\/+*=|!&]+)\s*

我将使用三个正则表达式:

<?php

$str = <<<EOT
(-20+3)
((value+10)*10)>=300   ||   (array[key]-20==0&&"foo==bar"!=="")
EOT;

$str = preg_replace('/("[^"]*"|\([^+=&<>|*\/\\%\w\d-]*|-?\d+|[\w[\]]+|\))/', ' $1 ', $str);
$str = preg_replace('/(?<=\() +| +(?=\))/', '', $str);
$str = preg_replace('/ +/', ' ', $str);

print_r($str);

如果你做了一个正则表达式,我会很乐意修复你的正则表达式。@MarinoBoscoloNeto-我仍然会在你的帖子中粘贴该代码,以证明你已经做出了努力。
(-20+3)
应该是
(-20+3)
还是
(-20+3)
?@WashingtonGuedes(-20+3)更好
<?php

$str = <<<EOT
(-20+3)
((value+10)*10)>=300   ||   (array[key]-20==0&&"foo==bar"!=="")
EOT;

$str = preg_replace('/("[^"]*"|\([^+=&<>|*\/\\%\w\d-]*|-?\d+|[\w[\]]+|\))/', ' $1 ', $str);
$str = preg_replace('/(?<=\() +| +(?=\))/', '', $str);
$str = preg_replace('/ +/', ' ', $str);

print_r($str);