ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[Regular Expression] หาคำใดๆก็ได้ที่ไม่มีคำนี้อยู่ ทำยังไงอ่ะครับ
หน้า: [1] 2  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [Regular Expression] หาคำใดๆก็ได้ที่ไม่มีคำนี้อยู่ ทำยังไงอ่ะครับ  (อ่าน 4795 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« เมื่อ: 26 กุมภาพันธ์ 2008, 10:35:18 »

ถ้าตัดเฉพาะตัวอักษรทำได้ แต่ถ้าจะตัดคำทำยังไงอ่ะ
ผมต้องการประโยคที่ไม่มีคำว่า ant อยู่ในประโยค จะเช็คยังไงดีครับ

[^ant]* แบบนี้มันจะตัดหมดทุกประโยคที่มีตัวอักษร a หรือ n หรือ t
[^(ant)]* ใส่วงเล็บไปก็ยังไม่ได้
[^a][^n][^t]* แบบนี้ก็ยังไม่ได้

ไม่ทราบจะตัดคำที่ไม่ต้องการยังไงครับ
บันทึกการเข้า
lowprofile
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #1 เมื่อ: 26 กุมภาพันธ์ 2008, 13:24:39 »

ไม่ค่อยเข้าใจคำว่า "ตัดคำ" ครับ
ถ้าจะ replace ทับคำที่ไม่ต้องการลองดู preg_replace
http://th.php.net/manual/en/function.preg-replace.php
โค๊ด:
$string = 'The quick brown fox jumped over the lazy ant.';
$patterns = '/ant/';
$replacements = 'dog';
$string = preg_replace($patterns, $replacements, $string);
echo $string;

ถ้าจะค้นหาคำเฉยๆ แนะนำ preg_match ครับ
http://th.php.net/manual/en/function.preg-match.php
โค๊ด:
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}
บันทึกการเข้า

ชีวิตนี้น้อยนัก

๏ พายเถิดพ่ออย่ารั้ง   รอพาย
จวนตะวันจักสาย   ส่องฟ้า
ของสดสิ่งควรขาย   จักขาด ค่าแฮ
ตลาดเลิกแล้วอ้า   บ่นอื้นเอาใคร ๚ะ๛


คราวนี้เป็นคราวเงินหมด
ธนาคาร : ไทยพาณิชย์ จำกัด (มหาชน) สาขา : อุดรธานี
ชื่อบัญชี : โครงการช่วยชาติโดยหลวงตามหาบัว ญาณสัมปันโน
เลขที่บัญชี : 510-2-83957-5
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #2 เมื่อ: 26 กุมภาพันธ์ 2008, 15:58:33 »

สมมุติผมต้องการทำให้ประโยคเป็นตัวหนาโดยเติม <b></b> เข้าไปคร่อมประโยค
แต่มีเงื่อนไขว่าประโยคนั้นจะต้องไม่มีคำว่า ant อยู่ในประโยค ถ้ามีก็ไม่ต้องไปทำตัวหนา
จะเขียนยังไงครับ
บันทึกการเข้า
lowprofile
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #3 เมื่อ: 26 กุมภาพันธ์ 2008, 18:50:25 »

สมมุติผมต้องการทำให้ประโยคเป็นตัวหนาโดยเติม <b></b> เข้าไปคร่อมประโยค
แต่มีเงื่อนไขว่าประโยคนั้นจะต้องไม่มีคำว่า ant อยู่ในประโยค ถ้ามีก็ไม่ต้องไปทำตัวหนา
จะเขียนยังไงครับ

คุณก็ใช้ preg_match ตรวจสอบว่ามี /ant/ อยู่หรือไม่ ถ้าไม่เข้าเงื่อนไขก็ echo "<b>" กะ "</b>" ปิดหัวท้ายเท่านั้นเอง

จากตัวอย่างด้านบนสามารถเอามาประยุกต์ใช้งานได้เลยครับ เติม ! เข้าไปนิดเดียว


ไม่ทราบว่าคุณ hurahura แบ่งประโยคด้วยวิธีไหนครับ?
บันทึกการเข้า

ชีวิตนี้น้อยนัก

๏ พายเถิดพ่ออย่ารั้ง   รอพาย
จวนตะวันจักสาย   ส่องฟ้า
ของสดสิ่งควรขาย   จักขาด ค่าแฮ
ตลาดเลิกแล้วอ้า   บ่นอื้นเอาใคร ๚ะ๛


คราวนี้เป็นคราวเงินหมด
ธนาคาร : ไทยพาณิชย์ จำกัด (มหาชน) สาขา : อุดรธานี
ชื่อบัญชี : โครงการช่วยชาติโดยหลวงตามหาบัว ญาณสัมปันโน
เลขที่บัญชี : 510-2-83957-5
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #4 เมื่อ: 27 กุมภาพันธ์ 2008, 12:59:32 »

แล้วสรุปว่ามันไม่มีวิธีที่จะเช็คข้อความที่เราไม่เอาเหรอครับ ผมแค่อยากรู้ว่ามันทำได้หรือเปล่า และทำอย่างไร ส่วนเรื่องวิธีนำไปประยุคใช้ หรือใช้วิธีอื่นเข้ามาแทนมันก็เป็นอีกประเด็นนึง


ลองดูตัวอย่างนี้

โค๊ด:
$text = "<a href='123.html'>AAAAAA<b>BBBBB</b></a><a href='123.html'>CCCCCC</a>";

ผมต้องการเปลี่ยน เป็น
โค๊ด:
$text = "[url=123.html]AAAAAA<b>BBBBB</b>[/url][url=123.html]CCCCCC[/url]";


สมมุติผมเขียนดักไว้
$text = preg_replace("#<a href=['\"]([^\s]*)['\"]>(.+?)</a>#i","\\2 ",$text);
แบบนี้มันมีโอกาศที่จะไปติด เป็น <a href='123.html'>AAAAAA<b>BBBBB</b></a><a href='123.html'>CCCCCC</a>

จึงต้องเขียนดักไว้
$text = preg_replace("#<a href=['\"]([^\s]*)['\"]>([^<]*)</a>#i","\\2 ",$text);

ดักตัว < ไว้ ใหเป็นคำอะไก็ได้ที่ไม่มีตัว < อยู่
มันก็มีปัญหาว่า ในข้อความตรงนั้นผู้ใช่อาจใส่เครื่องหมาย < เข้ามา หรือในกรณีที่มี tag อื่นอยู่ เช่น <b> มันก็จะทำงานผิดพลาด

ก็เลยต้องการดักคำว่า </a> ทั้งคำเลย
นั่นคือประโยคที่อยู่ระหว่าง <a href='123.html'> กับ </a> จะเป็นอะไรก็ได้ที่ไม่มีคำว่า </a> อยู่

ทั้งหมดเป็นแค่ตัวอย่างง่ายๆ ผมพยายามยกตัวอย่างที่มันต้องใช้ แต่แน่นอนว่ามันยังมีอีกหลายวิธีที่แก้ปัญหานี้ได้ ไม่ว่าจะแปลงค่า <> ให้เป็นอย่างอื่นก่อน การแบ่งข้อความเป็น array และวิธีอื่นๆอีกร้อยแปด แต่นั้นไม่ใช่ประเด็น

ประเด็นคือผมแค่ต้องการรู้ว่าตัว Regular Expression มันมีวิธีที่จะเช็ค "คำ" ที่เราไม่เอาหรือไม่ ถ้ามีทำอย่างไร เพราะมันจะเอาไปใช้ประโยชน์ในรูปแบบอื่นได้อีก

ขอบคุณครับ





บันทึกการเข้า
lowprofile
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #5 เมื่อ: 27 กุมภาพันธ์ 2008, 14:10:08 »

โธ่... ผมไม่รู้ว่าคุณ hurahura จะเอาไปใช้ทำ BB Code ผมจะได้ส่ง Script ให้เลย  Cry
แต่ว่าคำถามของคุณ hurahura ชี้นำให้ผมเข้าใจไปอีกทางนึงจริงๆ นะ ไม่ได้โม้เลยเอ้า

โค๊ด:
function smarty_modifier_bbcode2html($message) {
    $preg = array(
// Font and text manipulation ( [ color ] [ size ] [ font ] [ align ] )
'/\[color=(.*?)(?::\w+)?\](.*?)\[\/color(?::\w+)?\]/si'   => "<span style=\"color:\\1\">\\2</span>",
'/\[size=(.*?)(?::\w+)?\](.*?)\[\/size(?::\w+)?\]/si'     => "<span style=\"font-size:\\1px;\">\\2</span>",
'/\[font=(.*?)(?::\w+)?\](.*?)\[\/font(?::\w+)?\]/si'     => "<span style=\"font-family:\\1\">\\2</span>",
'/\[align=(.*?)(?::\w+)?\](.*?)\[\/align(?::\w+)?\]/si'   => "<div style=\"text-align:\\1\">\\2</div>",
'/\[b(?::\w+)?\](.*?)\[\/b(?::\w+)?\]/si'                 => "<b>\\1</b>",
'/\[s(?::\w+)?\](.*?)\[\/s(?::\w+)?\]/si'                 => "<s>\\1</s>",
'/\[i(?::\w+)?\](.*?)\[\/i(?::\w+)?\]/si'                 => "<i>\\1</i>",
'/\[u(?::\w+)?\](.*?)\[\/u(?::\w+)?\]/si'                 => "<u>\\1</u>",
'/\[h1(?::\w+)?\](.*?)\[\/h1(?::\w+)?\]/si'                 => "<h1>\\1</h1>",
'/\[h2(?::\w+)?\](.*?)\[\/h2(?::\w+)?\]/si'                 => "<h2>\\1</h2>",
'/\[center(?::\w+)?\](.*?)\[\/center(?::\w+)?\]/si'       => "<div style=\"text-align:center\">\\1</div>",

// [ code ] & [ php ] & [ html ]
'/(?<!\\\\)\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/si'          => "<div class=\"codetop\">Code:</div><div class=\"codemain\">\\1</div>",
'/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/si'             => "<div class=\"phptop\">PHP:</div><div class=\"phpmain\">\\1</div>",
'/(?<!\\\\)\[html(?::\w+)?\](.*?)\[\/html(?::\w+)?\]/si'             => "<div class=\"htmltop\">HTML:</div><div class=\"htmlmain\">\\1</div>",

// [ email ]
'/\[email(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/si'         => "<a href=\"mailto:\\1\" class=\"ng_email\">\\1</a>",
'/\[email=(.*?)(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/si'   => "<a href=\"mailto:\\1\" class=\"ng_email\">\\2</a>",

// [ url ]
'/\[url(?::\w+)?\]www\.(.*?)\[\/url(?::\w+)?\]/si'        => "<a href=\"http://www.\\1\" target=\"_blank\" class=\"ng_url\">\\1</a>",
'/\[url(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si'             => "<a href=\"\\1\" target=\"_blank\" class=\"ng_url\" rel=\"nofollow\">\\1</a>",
'/\[url=(.*?)(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si'       => "<a href=\"\\1\" target=\"_blank\" class=\"ng_url\" rel=\"nofollow\">\\2</a>",

// [ img ]
'/\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si'             => "<img src=\"\\1\" border=\"0\" />",
'/\[img=(.*?)x(.*?)(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si' => "<img width=\"\\1\" height=\"\\2\" src=\"\\3\" border=\"0\" />",

// [ quote ]
'/\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/si'         => "<div class=\"codetop\">Code:</div><div class=\"codemain\">\\1</div>",
'/\[sql(?::\w+)?\](.*?)\[\/sql(?::\w+)?\]/si'         => "<div class=\"sqltop\">SQL:</div><div class=\"sqlmain\">\\1</div>",
'/\[quote(?::\w+)?\](.*?)\[\/quote(?::\w+)?\]/si'         => "<div class=\"quotetop\">Quote:</div><div class=\"quotemain\">\\1</div>",
'/\[quote=(?:&quot;|"|\')?(.*?)["\']?(?:&quot;|"|\')?\](.*?)\[\/quote(?::\w+)?\]/si'   => "<div class=\"ng_quote\">Quote \\1:<div class=\"ng_quote_body\">\\2</div></div>",

// [ list ]
'/\[\*(?::\w+)?\]\s*([^\[]*)/si'                          => "<li class=\"ng_list_item\">\\1</li>",
'/\[list(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/si'           => "<ul class=\"ng_list\">\\1</ul>",
'/\[list(?::\w+)?\](.*?)\[\/list:u(?::\w+)?\]/s'          => "<ul class=\"ng_list\">\\1</ul>",
'/\[list=1(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/si'         => "<ol class=\"ng_list\" style=\"list-style-type:decimal;\">\\1</ol>",
'/\[list=i(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/s'          => "<ol class=\"ng_list\" style=\"list-style-type:lower-roman;\">\\1</ol>",
'/\[list=I(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/s'          => "<ol class=\"ng_list\" style=\"list-style-type:upper-roman;\">\\1</ol>",
'/\[list=a(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/s'          => "<ol class=\"ng_list\" style=\"list-style-type:lower-alpha;\">\\1</ol>",
'/\[list=A(?::\w+)?\](.*?)\[\/list(?::\w+)?\]/s'          => "<ol class=\"ng_list\" style=\"list-style-type:upper-alpha;\">\\1</ol>",
'/\[list(?::\w+)?\](.*?)\[\/list:o(?::\w+)?\]/s'          => "<ol class=\"ng_list\" style=\"list-style-type:decimal;\">\\1</ol>",

// the following lines clean up our output a bit
'/<ol(.*?)>(?:.*?)<li(.*?)>/si'         => "<ol\\1><li\\2>",
'/<ul(.*?)>(?:.*?)<li(.*?)>/si'         => "<ul\\1><li\\2>",

// emoticons
//'/:(\d\d):/'         => "<img src=\"".EMO_DIR."\\1.gif\" border=\"0\" />",
);
    $message = preg_replace(array_keys($preg), array_values($preg), $message);
    return $message;
}


ยังลองเอา script นี้ไปศึกษาทำความเข้าใจดูนะครับ ผมเอามาจากเว็บของ smarty อีกทีนึง



อีกอย่างนึง ที่ผมไม่ส่ง script ให้ทันทีเลย อาจจะเป็นเพราะผมจบครุศาสตร์มา เลยชอบใช้คำถามนำให้ผู้ถามเข้าใจด้วยตนเองมากกว่าที่จะเฉลยทันที หรือไม่ก็บอก concept คร่าวๆ ให้ไปทำความเข้าใจเอาเอง
ถ้ากลับไปสอบอีกรอบสงสัยจะตกแน่  Lips Sealed
« แก้ไขครั้งสุดท้าย: 27 กุมภาพันธ์ 2008, 14:12:45 โดย lowprofile » บันทึกการเข้า

ชีวิตนี้น้อยนัก

๏ พายเถิดพ่ออย่ารั้ง   รอพาย
จวนตะวันจักสาย   ส่องฟ้า
ของสดสิ่งควรขาย   จักขาด ค่าแฮ
ตลาดเลิกแล้วอ้า   บ่นอื้นเอาใคร ๚ะ๛


คราวนี้เป็นคราวเงินหมด
ธนาคาร : ไทยพาณิชย์ จำกัด (มหาชน) สาขา : อุดรธานี
ชื่อบัญชี : โครงการช่วยชาติโดยหลวงตามหาบัว ญาณสัมปันโน
เลขที่บัญชี : 510-2-83957-5
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #6 เมื่อ: 27 กุมภาพันธ์ 2008, 14:27:02 »

ขอบคุณมากครับ แต่สรุปก็ยังไม่ได้คำตอบอยู่ดี อย่างที่บอกไป ตัวอย่างการแปลง bbcode เป็นแค่ตัวอย่างที่ยกมาเท่านั้น ไม่ใช่ประเด็น ผมไม่ค่อยกล้ายกตัวอย่างเพราะกลัวว่าจะไม่ได้คำตอบที่ตรง และก็เป็นแบบนั้นจริงๆ  ประเด็นผมแค่อยากรู้นิดเดียวว่ามันจะตรวจเช็คคำที่เราไม่ต้องการอย่างไร

ยังไงก็ขอบคุณมากครับ


ว่าแต่ในตัวอย่างโค้ดที่ให้มาช่วยอธิบายบางอันไดหรือเปล่าครับ
อย่าง ?: หมายถึงอะไรครับ
/s ข้างหลังนี่หมายถึงอะไร

และไม่ทราบว่ามีเว็บไทยเว็บไหนสอนเรื่อง Regular Expression แบบลึกๆหน่อยหรือเปล่าครับ ผมหาดูหลายเว็บเจอแต่แบบพื้นฐาน ส่วนเว็บนอก ผมอ่านไม่ออก
« แก้ไขครั้งสุดท้าย: 27 กุมภาพันธ์ 2008, 14:34:52 โดย hurahura » บันทึกการเข้า
lowprofile
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #7 เมื่อ: 27 กุมภาพันธ์ 2008, 17:55:54 »

สงสัยต้องรบกวนคุณ EThaiZone ซะแล้วละครับ  Grin
บันทึกการเข้า

ชีวิตนี้น้อยนัก

๏ พายเถิดพ่ออย่ารั้ง   รอพาย
จวนตะวันจักสาย   ส่องฟ้า
ของสดสิ่งควรขาย   จักขาด ค่าแฮ
ตลาดเลิกแล้วอ้า   บ่นอื้นเอาใคร ๚ะ๛


คราวนี้เป็นคราวเงินหมด
ธนาคาร : ไทยพาณิชย์ จำกัด (มหาชน) สาขา : อุดรธานี
ชื่อบัญชี : โครงการช่วยชาติโดยหลวงตามหาบัว ญาณสัมปันโน
เลขที่บัญชี : 510-2-83957-5
thenetxx
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 1,986



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 27 กุมภาพันธ์ 2008, 18:32:25 »

-*-

โค๊ด:
$text = 'ant is on the wall';
  if(ereg('ant',$text)){
echo "คำว่า ant ผิดกฏเว็บ อะจึ๊ย ๆ";
exit();
}



หรือว่า
โค๊ด:
$text = str_replace('ant',' ',$text);

-*- ???ไม่เห็นต้องทำให้ยากนิ
« แก้ไขครั้งสุดท้าย: 27 กุมภาพันธ์ 2008, 18:34:23 โดย thenetxx » บันทึกการเข้า

Develop site but can't develop life
ASIA
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #9 เมื่อ: 28 กุมภาพันธ์ 2008, 12:08:22 »

ผมขอตอบก่อนนะ หายไปไม่กี่วันคิดถึงละสิ (ฮา)  Grin

การตัดคำออกจากประโยคในลักษณะนั้นด้วย preg_replace เพียวๆ ไม่สามารถทำได้ครับ (เคยลองมาแล้ว  Tongue)

คงต้องใช้ preg_match เช็คก่อน แล้วถึงค่อยมีการเรียกคำสั่งอื่นต่อ เช่น

โค๊ด:
if(!preg_match("#ant#", $string)) {
echo $string;
}

ไม่สามารถทำทั้งตรวจจับและแทนที่ในครั้งเดียวได้ครับ

ส่วนเรื่อง /s คืออะไร อ่านนี้ดูครับ
โค๊ด:
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
บันทึกการเข้า

lowprofile
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #10 เมื่อ: 28 กุมภาพันธ์ 2008, 12:17:59 »

ตัวจริงมาแว้วววววว  Cool
บันทึกการเข้า

ชีวิตนี้น้อยนัก

๏ พายเถิดพ่ออย่ารั้ง   รอพาย
จวนตะวันจักสาย   ส่องฟ้า
ของสดสิ่งควรขาย   จักขาด ค่าแฮ
ตลาดเลิกแล้วอ้า   บ่นอื้นเอาใคร ๚ะ๛


คราวนี้เป็นคราวเงินหมด
ธนาคาร : ไทยพาณิชย์ จำกัด (มหาชน) สาขา : อุดรธานี
ชื่อบัญชี : โครงการช่วยชาติโดยหลวงตามหาบัว ญาณสัมปันโน
เลขที่บัญชี : 510-2-83957-5
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #11 เมื่อ: 28 กุมภาพันธ์ 2008, 14:07:27 »

โอ้...ท่าน EThaiZone มาแล้ว

ตกลงมันทำไม่ได้จริงๆหรือเนี่ย น่าเสียดาย นึกว่า Regular Expression มันจะเทพกว่านี้ ข้อจำกัดเยอะเหมือนกันนิ
แล้วพอจะช่วยอธิบาย ?: ได้หรือเปล่าครับ หรือคำสั่งอื่นๆที่อยู่นอกเหนือพวกพื้นฐาน เผื่อเอามาประยุคใช้ได้


อ้างถึง
ส่วนเรื่อง /s คืออะไร อ่านนี้ดูครับ
http://www.php.net/manual/en/r...nce.pcre.pattern.modifiers.php

ง่ายๆเลย อ่านไม่ออกซักตัว 555


แต่ไม่เป็นไร ยังไงก็ขอบคุณทุกคนที่เขามาตอบมากครับ


บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #12 เมื่อ: 28 กุมภาพันธ์ 2008, 14:14:19 »

สร้า้งโจทย์มาสักข้อสิครับ
เดียวผมจะเขียนหลายๆ แบบให้ดู เท่าที่จะเป็นไปได้  Smiley
บันทึกการเข้า

เรารักนายนะน้องฟี่
ยามเฝ้าบอร์ด
Global Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 182
ออฟไลน์ ออฟไลน์

กระทู้: 5,010



ดูรายละเอียด
« ตอบ #13 เมื่อ: 28 กุมภาพันธ์ 2008, 14:22:18 »

โจ้ว่างแล้วใช่มั้ยครับ  Kiss
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #14 เมื่อ: 28 กุมภาพันธ์ 2008, 14:25:10 »

โจ้ว่างแล้วใช่มั้ยครับ  Kiss

เปล่า ครับ แต่ขี้เกียจเป็นพักๆ เลยแวะมาบอร์ดเป็นพักๆ
บันทึกการเข้า

hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #15 เมื่อ: 28 กุมภาพันธ์ 2008, 15:10:12 »

นึกโจทย์ไม่ออก

งั้นเอาโจทย์เดิมที่เคยยกไปก็ได้ครับ ถ้าให้ใช้แค่บรรทัดเดียว ไม่ต้องแยกเป็น array ก่อน  หรือเปลี่ยนค่า <b> ก่อน

<a href='123.html'>AAAAAA<b>BBBBB</b></a><a href='123.html'>CCCCCC</a>

ทำอย่างไรถึงจะมั่นใจว่ามันจะไม่ไปติดเป็น

<a href='123.html'>AAAAAA<b>BBBBB</b></a><a href='123.html'>CCCCCC</a>

ผลที่ต้องการให้ออกมาแบบนี้

โค๊ด:
[url=123.html]AAAAAA<b>BBBBB</b>[/url][url=123.html]CCCCCC[/url]





หรือไม่ช่ยอธิบายบรรทัดนี้ได้หรือเปล่าอ่ะครับ '/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/si'     

คืออยากรู้ว่า ?<!\\\\ กับ ?:: มันคืออะไร
« แก้ไขครั้งสุดท้าย: 28 กุมภาพันธ์ 2008, 15:11:56 โดย hurahura » บันทึกการเข้า
hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #16 เมื่อ: 28 กุมภาพันธ์ 2008, 15:22:27 »

หรือลองโจทย์นี้


โค๊ด:
<div align='right'><div align='center'>มะม่วงกับมะละกอเป็นผลไม้</div><div align='left'>มะเขือเป็นผัก</div></div>

จงเขียนโค้ดที่สั้นที่สุด ที่ให้เปลี่ยนจาก html เป็น bbcode โดยจะเปลี่ยนเฉพาะ tag ที่ข้อความภายในมีคำว่า "มะ" มากกว่า 1 คำ
ผลที่ได้ควรจะออกมาเป็นอย่างนี้

โค๊ด:
[right][center]มะม่วงกับมะละกอเป็นผลไม้[/center]<div align='left'>มะเขือเป็นผัก</div>[/right]


โจทย์อาจดูไร้สาระไปหน่อย ยกขึ้นมาแค่อยากศึกษาวิธีการเขียนของคนอื่นๆ เผื่อจะมีวิธีที่มันสั้นๆกว่าที่ผมทำอยู่  จะได้เอาไปประยุคกับงานอื่นๆ
« แก้ไขครั้งสุดท้าย: 28 กุมภาพันธ์ 2008, 15:35:16 โดย hurahura » บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #17 เมื่อ: 28 กุมภาพันธ์ 2008, 16:39:28 »

โจทย์ให้มาละเอียดเกินไปครับ

เกินไปในที่นี้คือ เกินมากกว่าจะเขียนให้อัตโนมัติทั้งหมดได้

(คำว่าเกิน ให้นึกภาพถึงคำว่า pattern นะครับ จะนึกออก)

ประมาณหัวค่ำจะมาตอบครับ (อีก 15 นาทีเลิกงานแว้ว  Tongue)

บันทึกการเข้า

hurahura
สมุนแก๊งเสียว
*

พลังน้ำใจ: 20
ออฟไลน์ ออฟไลน์

กระทู้: 868



ดูรายละเอียด
« ตอบ #18 เมื่อ: 28 กุมภาพันธ์ 2008, 16:50:33 »

ที่ว่าอยู่เกิน pattern นี่ โจทย์แรกหรือโจทย์ที่ 2 ครับ

โจทย์แรกไม่น่าเกิน ส่วนโจทย์ที่ 2 งั้นเปลี่ยนโจทย์ใหม่ เป็น

โค๊ด:
<b>มะม่วงกับมะละกอเป็นผลไม้</b><b>มะเขือเป็นผัก</b><b>แตงโมอร่อย</b>

ให้เปลี่ยน tag เป็น bb code โดยคำภายในจะต้องมี มะ มากกว่า 1  หรือมีคำว่าแตงอยู่
ผลที่ได้ควระจะเป็นแบบนี้

โค๊ด:
[b]มะม่วงกับมะละกอเป็นผลไม้[/b]<b>มะเขือเป็นผัก</b>[b]แตงโมอร่อย[/b]

แบบนี้ใช้ pattern อย่างเดียว บรรทัดเดียวน่าจะเอาอยู่
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #19 เมื่อ: 28 กุมภาพันธ์ 2008, 18:25:29 »

ที่ว่าอยู่เกิน pattern นี่ โจทย์แรกหรือโจทย์ที่ 2 ครับ

โจทย์แรกไม่น่าเกิน ส่วนโจทย์ที่ 2 งั้นเปลี่ยนโจทย์ใหม่ เป็น

โค๊ด:
<b>มะม่วงกับมะละกอเป็นผลไม้</b><b>มะเขือเป็นผัก</b><b>แตงโมอร่อย</b>

ให้เปลี่ยน tag เป็น bb code โดยคำภายในจะต้องมี มะ มากกว่า 1  หรือมีคำว่าแตงอยู่
ผลที่ได้ควระจะเป็นแบบนี้

โค๊ด:
[b]มะม่วงกับมะละกอเป็นผลไม้[/b]<b>มะเขือเป็นผัก</b>[b]แตงโมอร่อย[/b]

แบบนี้ใช้ pattern อย่างเดียว บรรทัดเดียวน่าจะเอาอยู่

ผมทำให้ผิดหวังซะแล้วล่ะมั้ง  Cheesy

โค๊ด:
$str = "<b>มะม่วงกับมะละกอเป็นผลไม้</b><b>asd54as65d</b><b>มะเขือเป็นผัก</b><b>แตงโมอร่อย</b>";

$arr = array("มะ", "แตง");

do {
preg_match("#>([^<]*)<#", $str, $match);
if(count($match) <= 1) break;
preg_match("#".implode("|", $arr)."#", $match[1], $match2);
if(!empty($match2[0])) {
$tmp = explode($match2[0], $match[1]);
}
$ck2 = array_search($match2[0], $arr);
if((count($tmp) > 2 && $ck2 !== FALSE) || $match2[0] == "แตง") {
$str = preg_replace("#<([^>]+)>(".$match[1].")</([^>]+)>#i", "[\\1]\\2[/\\3]", $str);
} else {
$str = preg_replace("#<([^>]+)>(".$match[1].")</([^>]+)>#i", "![\\1!]\\2![/\\3!]", $str);
}
preg_match("#>([^<]*)<#", $str, $match);
} while(count($match) > 1);
$str = strtr($str, array("![" => "<", "!]" => ">"));

echo $str;

ผมว่า สู้แปลงลักษณะข้อมูลแล้วค่อยตรวจจะดีกว่า
แนะนำได้แค่ว่า
การตรวจคำนวนคำ ไม่สามารถตรวจด้วย regex ได้เลยครับ

อย่างวิธีปมข้างบน ก็ใช้ explode กับคำที่อยากตรวจเลย

explode("มะ", $string)

แล้วค่อยลบค่าออก 1 ก็จะได้จำนวนคำครับ  Tongue
« แก้ไขครั้งสุดท้าย: 28 กุมภาพันธ์ 2008, 18:30:06 โดย EThaiZone » บันทึกการเข้า

หน้า: [1] 2  ทั้งหมด   ขึ้นบน
พิมพ์