質問編集履歴
1
タイトルの変更および、質問の意図の追加、質問内容を整理しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
[PHP]正規表現について
|
1
|
+
[PHP]正規表現について-カンマ区切りでパースしたいがシングル・ダブルクォートで囲まれている場合は無視したい
|
body
CHANGED
@@ -1,16 +1,23 @@
|
|
1
|
-
|
1
|
+
フォームにPHP関数を入力し、POSTした後、実際にPHPで実行する、という練習プログラムを作っています。
|
2
|
+
(これは安全性に問題がありそうであるため、公開するものではありません。ただ、関数名はホワイトリスト化しています。)
|
2
3
|
|
4
|
+
質問内容としましては、
|
5
|
+
「PHP関数をフォームからPOSTし、その内容をパースしたい。
|
6
|
+
そのため、function()の括弧内をカンマ区切りで抜き出したいが、
|
7
|
+
シングルクォート、ダブルクォートで区切られた文字列の中にあるカンマは無視する方法を知りたい」
|
8
|
+
というものです。
|
9
|
+
|
10
|
+
例えば下記のような関数があったとします。
|
3
11
|
```
|
4
12
|
function(text,int1,int2);
|
5
13
|
```
|
6
14
|
|
7
15
|
|
8
|
-
この関数が例えば下記のような文字列として渡されたと考え、
|
16
|
+
この関数が例えば下記のような文字列として渡されたと考え、PHPで処理するのと同じように正規表現でパースできないかと考えています。
|
9
17
|
```
|
10
18
|
function('a,b,c',1,2);
|
11
19
|
```
|
12
|
-
しかし、思いのほか複雑です。
|
13
|
-
textの中にカンマがある場合です。
|
20
|
+
しかし、textの中にカンマがある場合、このままでは意図しない形でパースされてしまいます。
|
14
21
|
|
15
22
|
PHPでは、この文字列を表すtextを、"text"や'text'と、囲い文字で囲います。
|
16
23
|
囲って入れば、中にカンマがあったとしても、textの中のものとして扱われます。
|
@@ -29,5 +36,5 @@
|
|
29
36
|
`(?!.*,)(.*)`
|
30
37
|
こちらをOR条件として入れても、マッチしないのです。
|
31
38
|
|
32
|
-
上記の1と2を同時に満たす正規表現
|
39
|
+
上記の1と2を同時に満たす正規表現を用いつつ、カンマ区切りが出来る方法を模索しています。
|
33
40
|
ご助言いただけますとうれしいです。
|