因为断言-在7.2版本更改后,需要使用字符串检查断言是否为FALSE,因为自PHP 7.2起断言已断言。
我想将replace in path
php storm函数与regex一起使用,更改所有点,这是正则表达式吗?
示例示例:
assert('is_array($config)');
assert('is_string($location)');
assert('is_string($entityId)');
我刚刚找到并替换了第一引号,就像这样
.*?(\bassert\('\b)[^$]*
替换为assert(
。但是我不知道最后报价的情况。
结果必须是
assert(is_array($config));
assert(is_string($location));
assert(is_string($entityId));
我找到第一个单引号的解决方案,需要找到最后一个单引号的解决方案
有任何同伴吗?
答案 0 :(得分:1)
我们最好从具有更多边界的表达式开始,例如:
.*?(\bassert\b)\s*\(('|")\s*([^'"]*?)\s*('|")\s*\)\s*;
$re = '/.*?(\bassert\b)\s*\((\'|")\s*([^\'"]*?)\s*(\'|")\s*\)\s*;/s';
$str = 'assert (" is_string($entityId)") ;';
$subst = '$1($3);';
echo preg_replace($re, $subst, $str);
该表达式在this demo的右上角进行了说明,如果您想进一步探索或修改它,在this link中,您可以逐步观察它如何与某些示例输入匹配步骤,如果您愿意的话。
答案 1 :(得分:1)
仅匹配单引号的一个选项可以是使用\G
在上一次匹配的末尾声明位置。利用\K
忘记当前匹配的内容,然后匹配单引号。
在替换中,使用一个空字符串。
(?:^.*?\bassert\(|\G(?!^))[^']*\K'(?=.*\);)
关于图案
(?:
非捕获组
^.*?\bassert\(
从字符串的开头以非贪婪的方式进行匹配,直到遇到assert(
|
或\G(?!^)
在上一场比赛而不是开始时断言位置)
关闭非捕获组[^']*\K'
匹配0次以上而不是'
,忘记匹配的内容并匹配'
(?=.*\);)
断言右边是右括号和;
另一种方法是使用3个捕获组,匹配要删除的'
并在替换中使用这些组:
^(.*?\bassert\()'([^']+)'(.*)$