【问题标题】:Parse after last character and before another character在最后一个字符之后和另一个字符之前解析
【发布时间】:2015-08-12 06:47:04
【问题描述】:

我有一个如下所示的数组:

array(7) [
  0 => "account_bad_rooms_view-1" (24)
  1 => "account_view-2" (14)
  2 => "admin_collector_view-5" (22)
  3 => "admin_collector_edit-5" (22)
  4 => "machine_service_item_edit-57" (28)
  5 => "money_view-58" (13)
  6 => "mu_edit-61" (10)
]

我需要获取仅包含"edit""view" 的子字符串,所以我需要在最后一个下划线之后和破折号之前解析这个字符串。到目前为止,我有这个:

foreach ($permissionsArray as $selectId => $permissions) {

    preg_match('~_(.*?)-~', $permissions, $output);
    dump($output[1]);

}

这适用于只有一个下划线的字符串,所以结果是:

"bad_rooms_view"
"view"
"collector_view"
"collector_edit"
"service_item_edit"
"view"
"edit"

我怎样才能用简单的方法做到这一点?

【问题讨论】:

    标签: php regex parsing substring


    【解决方案1】:

    您可以使用preg_filter 函数获取输出,而无需使用任何循环:

    $array=array("account_bad_rooms_view-1", "account_view-2", "admin_collector_view-5",
      "admin_collector_edit-5", "machine_service_item_edit-57", "money_view-58", "mu_edit-61");
    
    $matches = preg_filter('/^.+?_([^-_]+)-.*$/', '$1', $array);
    
    print_r($matches);
    

    输出:

    Array
    (
        [0] => view
        [1] => view
        [2] => view
        [3] => edit
        [4] => edit
        [5] => view
        [6] => edit
    )
    

    【讨论】:

    • 我也探索过这个,但是那些不匹配模式的条目呢?它们将被跳过,我认为应该保留它们。我想出了this code
    【解决方案2】:
    _([^_]*)-
    

    您可以改用它。这将不允许另一个_

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2016-12-14
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多