2

これは、正規表現の専門家にとってはとても簡単なはずです。

<APP>_<Resource>_<Action>アクション セグメントに組み合わせまたは CRUD が含まれるグループ名があります。これらが出現する可能性のある組み合わせは 13 通りあります。

CRUD、CRU、CRD、CUD、RUD、CR、CU、CD、RU、RD、UD、C、R、U、D

グループ名のアクションセグメント内のこれらのパターンに正規表現を一致させたいだけです。アプリケーションとリソースは、さまざまな異なる文字列に変更できます。

グループ名の例

PM_folder1_cru、PM_folder2_ud、PM_folder3_cr、PM_folder4_cu、PM_personalFolder_crud

前もって感謝します

編集

これは現在、以下を使用して行われています。

$allowedActions = ['CRUD', 'CRU', 'CRD', 'CUD', 'RUD', 'CR', 'CU', 'CD', 'RU', 'RD', 'UD', 'C', 'R', 'U', 'D'];

if (in_array(strtoupper($action), $allowedActions)) {
4

3 に答える 3

0

注:この回答は、文字のみが含まれ、文字と数字のみがAPP含まれていることを前提としています。Resource

文字クラスを使用して、より一般的なマッチングを行うことができます:
(?i)[a-z]+_[a-z0-9]+_[crud]{1,4}. これは、たとえばDRUC,にも一致することに注意してください。DDDDRRC

それが望ましくない場合は、より具体的なものを使用できます。
(?i)[a-z]+_[a-z0-9]+_(?:c?r?ud?|cr?d?|r?d|r)

これは何を意味するのでしょうか ?

  • (?i):i大文字と小文字を区別しないように修飾子を設定します
  • [a-z]+: 文字に 1 回以上一致
  • _: 1 つのアンダースコアに一致
  • [a-z0-9]+: 文字と数字を 1 回以上一致させる
  • _: 1 つのアンダースコアに一致
  • (?:c?r?ud?|cr?d?|r?d|r): マッチcrud, cru, rud, c, r, d etc...

PHP コード:
別の (サブ) 配列でアクションを取得する場合は、名前付きグループを追加して削除することができます?::

$string = 'PM_folder1_cru,
PM_folder2_ud,
PM_folder3_cr,
PM_folder4_cu,
PM_personalFolder_crud';
preg_match_all('#(?i)[a-z]+_[a-z0-9]+_(?P<action>c?r?ud?|cr?d?|r?d|r)#', $string, $m);
print_r($m['action']); // Get actions
print_r($m); // everything ?
于 2013-06-13T08:18:42.930 に答える