php regular expression ครับช่วยที คือผมจะใช้ regular expression อ่านข้อความใน text ไฟล์มาแปะไว้บนหน้าเว็บได้ยังไงอะครับ
Code (PHP)
$fp = fopen('test.txt', 'r');
// ข้อมูลทั้งหมด
$data = fread($fp, filesize('test.txt'));
// แยกบรรทัด
$lines = preg_split('/\n/', $data);
$wanted = array();
foreach ($lines as $line)
{
$tmp = trim(preg_replace('/test\s(.*)/', '$1', $line));
if ( ! in_array($tmp, $wanted))
{
$wanted[] = $tmp;
}
}
print_r($wanted);
http://gunner.freetzi.com
Date :
2010-07-15 14:01:39
By :
pjgunner
พี่เอี่ยวครับพี่ช่วยอธิบาย pattern ตรง preg_split กับ preg_replace หน่อยได้ไหมครับ
Date :
2010-07-15 14:13:19
By :
loo
\n คือการตัดบรรทัดครับ โดยใช้ การขึ้นบรรทัดใหม่ ถ้าเป็นระบบปฏิบัติการ unix ให้ใช้ \n วินโดวส์ ให้ใช้ \r\n แมคอินทอชให้ใช้ \r
ส่วนตรง preg_replace นั้นคือการแคปเจอ ตัวที่พบ (ส่วนรูปแบบต่าง ไปศึกษาเอง ไม่ยาก แต่ก็งง^^) คือใช้() แคปเจอร์ และ $1 คือแบกรีเฟอเรนซ์ครับ
ขอแก้โค้ดหน่อย บางทีอาจไม่มี หลัง test ก็ได้ (กันไวก่อน)
Code (PHP)
$fp = fopen('test.txt', 'r');
// ข้อมูลทั้งหมด
$data = fread($fp, filesize('test.txt'));
// แยกบรรทัด
$lines = preg_split('/\n/', $data);
$wanted = array();
foreach ($lines as $line)
{
$wanted[] = trim(preg_replace('/test\s(.+)/', '$1', $line));
}
$wanted = array_unique($wanted);
print_r($wanted);
Date :
2010-07-15 14:22:56
By :
pjgunner
พี่เอี่ยวครับแล้วถ้าใน text file ผมมีขอมูลอันอื่นนอกเหนือจากที่ผมโพสต์แล้วต้องการให้มันโชว์แค่ pl ถึง mkp เท่านั้นอะครับจะตัดมันออกยังไงอะครับพี่
Date :
2010-07-15 14:41:43
By :
loo
ลองเอาตัวอย่างมาคับ ลองทำไฟล์มาและความต้องการมา ไม่แน่ว่า regex อาจใช้ไม่ได้ หรือผมอาจทำไม่ได้ ^^
Date :
2010-07-15 14:45:43
By :
pjgunner
เช่น
test pl
abc:1.423 olp:2.233
test lo
tbc:1.423 tlp:2.233
test 123
abc:1.423 olp:2.233
test mkp
test pl
test lo
test 123
test mkp
อย่างงี้อะครับพี่เอี่ยวถ้าต้องการแค่
pl
lo
123
mkp
อะครับพี่
Date :
2010-07-15 14:49:56
By :
loo
Code (PHP)
$fp = fopen('test.txt', 'r');
// ข้อมูลทั้งหมด
$data = fread($fp, filesize('test.txt'));
// แยกบรรทัด
$lines = preg_split('/\n/', $data);
$wanted = array();
foreach ($lines as $line)
{
if ( ! preg_match('/test\s.+/', $line))
continue;
$wanted[] = trim(preg_replace('/test\s(.+)/', '$1', $line));
}
$wanted = array_unique($wanted);
echo join('<br />', $wanted);
Date :
2010-07-15 14:56:55
By :
pjgunner
สุดยอดเลยครับพี่ขอบุณพี่มากจริงๆครับคือพี่มีเว็บเกี่ยวกับการใช้ pattern ใน preg ไหมครับว่าแต่ละอันมันคืออะไรเช่น \s + ... อะไรพวกนี้อะครับ
Date :
2010-07-15 15:05:53
By :
loo
มีคับ เสิร์จ เลย มีเยอะแยะ
ลองคีย์เวิร์ด
regex howto ดูคับ
Date :
2010-07-19 15:22:05
By :
pjgunner
Load balance : Server 04