|
|
|
วิธีตัด regular expression โค้ด insert MySQL โดย PHP |
|
|
|
|
|
|
|
รบกวนช่วยดูหน่อยครับ คือผมต้องการตัด values ของโค้ด insert ตัดใน PHP นะครับ
จะต้อง regular expression ยังไงเหรอครับ
ตัวอย่างปัญหาที่เจอนะครับ
1. INSERT INTO AA(F1,F2)VALUES('V1','V2,V3');
2. INSERT INTO AA(F1,F2)VALUES(1,'V2,V3');
3. INSERT INTO AA(F1,F2)VALUES('V1,V2','V3');
4. INSERT INTO AA(F1,F2)VALUES('V1,V2',3);
** values ใน insert อาจเป็น ภาษาไทย หรือ ภาษาอังกฤษ ก็ได้นะครับ
ขอบคุณมากครับ
Tag : PHP, MySQL
|
|
|
|
|
|
Date :
2013-06-01 11:26:56 |
By :
patiphan |
View :
1339 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากได้ข้อมูลในรูปแบบไหนเหรอครับ
|
|
|
|
|
Date :
2013-06-01 12:41:59 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากได้เป็น array ครับ อย่างเช่น
1. INSERT INTO AA(F1,F2)VALUES('V1','V2,V3');
จะได้ array(0=>'V1',1=>'V2,V3')
2. INSERT INTO AA(F1,F2)VALUES(1,'V2,V3');
จะได้ array(0=>1,1=>'V2,V3')
3. INSERT INTO AA(F1,F2)VALUES('V1,V2','V3');
จะได้ array(0=>'V1,V2',1=>'V3')
4. INSERT INTO AA(F1,F2)VALUES('V1,V2',3);
จะได้ array(0=>'V1,V2',1=>3)
|
|
|
|
|
Date :
2013-06-01 16:44:17 |
By :
patiphan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่เก่ง regular expression ครับ
ผมจะใช้วิธี explode() สองรอบ
รอบแรกใช้แยกข้อความด้วย VALUES
รอบที่สองใช้แยกข้อความด้วย ','
จากนั้นก็ใช้ str_replace() แทนที่ (' เป็นค่าว่าง ให้กับอาร์เรย์ผลลัพธ์ตัวแรก
จากนั้นก็ใช้ str_replace() แทนที่ '); เป็นค่าว่าง ให้กับอาร์เรย์ผลลัพธ์ตัวที่สอง
|
|
|
|
|
Date :
2013-06-01 16:55:21 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
regex ครั้งเดียวไม่พอครับ จริงๆ ต้อง parse กันแบบหลายตลบมาก ถ้าจะให้ได้ผลที่สมบูรณ์จริงๆ
แต่ถ้าจะเอาง่ายๆ ใช้วิธีของคุณ cyberman ก็ได้ครับ
แต่ถ้าจะใช้ pcre ก็จะประมาณนี้
Code (PHP)
<?php
$str = "INSERT INTO AA(F1,F2)VALUES('V1,V2','V3', 3, 555, 666, 777, 'สวัสดีครับ', 'CookiePHP', '');";
// เอาเฉพาะส่วนตั้งแต่ 'VALUES' เป็นต้นไป
$str = mb_substr($str, mb_strpos($str, 'VALUES', 0, "UTF-8"), PHP_INT_MAX, "UTF-8");
// หาเฉพาะอะไรก็ตามที่เริ่มด้วย ( หรือ , และจบด้วย , หรือ )
// หรือเริ่มด้วย ' และจบด้วย '
preg_match_all(
'/[\(\,]\s*(?>([^\'][^\,\)]*)|\'((?>\\\\\'|[^\'])*)\')/u',
$str,
$m,
PREG_SET_ORDER
);
// เอาผลที่ได้มารวมกันเป็น array เดียว
$all = array();
foreach ($m as $v) {
$all[] = isset($v[2]) ? $v[2] : $v[1];
}
print_r($all);
ผลลัพธ์
Array
(
[0] => V1,V2
[1] => V3
[2] => 3
[3] => 555
[4] => 666
[5] => 777
[6] => สวัสดีครับ
[7] => CookiePHP
[8] =>
)
|
|
|
|
|
Date :
2013-06-02 02:05:42 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$str = "INSERT INTO AA(F1,F2)VALUES('V1','V2,V3');";
$p = array('/INSERT/','/INTO/','/AA/','/F1,F2/','/VALUES/','/;/','/\(/','/\)/',"/'/");
$str = trim(preg_replace($p, null, $str));
$result = preg_split('/,/',$str);
var_dump($result);
|
|
|
|
|
Date :
2013-06-02 03:11:14 |
By :
t-monroe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|