teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

タイトルの変更および、質問の意図の追加、質問内容を整理しました。

2017/05/05 02:11

投稿

findy
findy

スコア43

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
- この関数が例えば下記のような文字列として渡されたと考え、擬似的にPHPで処理するように正規表現でパースできないかと考えています。
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
  ご助言いただけますとうれしいです。