Regex帮助..只在某些组合中剥去坯件

  • 本文关键字:组合 帮助 Regex php regex
  • 更新时间 :
  • 英文 :


不幸的是,我不是正则表达式专家。所以,我在这里搜索并使用了我找到的一些正则表达式。";半解";我的需求已经满足了,现在我正在寻找缺失的小部分。

一般来说,我正在使用tokenizer中内置的PHP编写代码行。最后,我得到了一个包含WhitespaceTabsbreaks的代码字符串。我在这里发现的东西已经清理干净了;不必要的空白";。但我想更进一步:

$foo [ 'bar' ], $foo ['bar' ], $foo [ 'bar'](包含一些空白(

应该全部转到:$foo['bar'](不再有空格(

$foo [ "bar" ], $foo ["bar" ], $foo [ "bar"]

应转到:$foo ["bar"]

但是:$foo [ 'this is different' ]应转到$foo['tis is different'](保留有效空白(

目前我使用:

$_S = array( " [", " '", "' ", " ]" );
$_R = array( "[", "'", "'", "]" );
$_tx = preg_replace( '/s+/', ' ', $A_tx);
$_tx = str_replace( $_S, $_R, $_tx );

但可以肯定的是,这项工作也可以只用一个更复杂的正则表达式来完成?

如果您想使用单一模式,一个选项可以是使用两个捕获组和一个带有分支重置组的交替。

我假设$foo['tis is different']应该是$foo['this is different']

更换时使用两组$1$2

$w+K(?|h*([)h*('[^']+')h*|(h*[)h*("[^"]+")h*)(?=])

图案与匹配

  • $w+匹配$和1+字字符
  • K忘记目前匹配的内容
  • (?|支路复位组
    • h*([)h*('[^']+')h*捕获组1中的[第2组中的打开至关闭',并匹配周围所有要移除的空间
    • |
    • (h*[)h*("[^"]+")h*捕获组1中的空间和[以及第2组中的打开至关闭",仅匹配"周围的空间
  • )关闭分支复位组
  • (?=])直接在右侧断言]字符

Regex演示| Php演示

$re = '/$w+K(?|h*([)h*('[^']+')h*|(h*[)h*("[^"]+")h*)(?=])/m';
$str = '$foo [ "bar" ], $foo ["bar" ], $foo [ "bar"]
$foo [ 'bar' ], $foo ['bar' ], $foo [ 'bar']
$foo [ 'this is different' ]';
$result = preg_replace($re, '$1$2', $str);
echo $result;

输出

$foo ["bar"], $foo ["bar"], $foo ["bar"]
$foo['bar'], $foo['bar'], $foo['bar']
$foo['this is different']

最新更新