สอบถามเกี่ยวกับการดึงข้อความครับช่วยหน่อยครับ

เริ่มโดย guy852, 03 เมษายน 2008, 23:05:52

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

guy852

สอบถามเกี่ยวกับการดึงข้อความครับช่วยหน่อยครับ 


ตัวแปร results คือ
<input type="hidden" name='varname' value="7d51ea57cc3f7dd1ccf5336a23ec1286"><input type="hidden" name="7d51ea57cc3f7dd1ccf5336a23ec1286" value="befc1da27527f6b6dd9aed5744f70359">



<?PHP

$dela=strpos($results,"<input type=\"hidden\" name='varname' value=\"");
$panala=strpos($results,"\">",$dela);
$text=substr($results,$dela+50,$panala-$dela-50);

echo "textis >>".$text."<BR>";

/**
$dela=strpos($results,"<input type=\"hidden\" name=\"".$text."\" value=\"");
$panala=strpos($results,"\">",$dela);
$text2=substr($results,$dela+69,$panala-$dela-69);

echo "textis >>".$text2."<BR>";
**/

$pattern = '|<input type="hidden" name="'.$text.'" value="(.*)">|s'; // mode 's' means dot (.) matches all newline characters (\n)
echo $pattern;
preg_match( $pattern , $html , $match );
$bodyContent = $match[1];
echo ">>>".$bodyContent;
?>

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

ball6847

ตอบเท่าที่รู้ละกันครับ เพราะแต่ก่อนมันก็เป็นปัญหากับผมเหมือนกัน

strpos และ substr นี่ผมใช้ตอนที่ยังใช้ regex ไม่เป็น มันยุ่งยากไปหน่อย พอใช้ regex ได้นิดๆหน่อยก็ลืมไปเลย   :-[

ผมพูดถึง ข้างล่างแระกัน
ดูใน pattern ของ regex แล้วรู้สึกว่า ไม่จำเป็นต้องใช้ s mode นะคับ เพราะถ้าข้อมูลมันอยู่ในบรรทัดเดียวก็ไม่ต้องระบุโหมดไปก็ได้ครับ (จริงๆน่าจะลอง preg_match_all ดูก่อนก้ได้นะ)

อีกนิดนึง ถ้าชนิดของข้อมูลที่จะ match นั้นมี charactor class ที่มีรูปแบบตายตัว ก็น่าจะระบุไปด้วย จะทำงานได้ไวขึ้น อย่างตัวอย่างนี้ คิดว่าน่าจะมี charator class อยู่ 2 อย่างคือ ตัวพิมพ์เล็กกับตัวเลข

เราก็ใช้ ([a-z0-9]*) แทน (.*) จะทำให้ทำงานได้ชัดเจนกว่า (มั้ง)

ลองดูนะเพราะผมก็ขามั่วคนนึง  :-[
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

EThaiZone

จัดให้! แบบ Regex

$results = '<input type="hidden" name=\'varname\' value="7d51ea57cc3f7dd1ccf5336a23ec1286"><input type="hidden" name="7d51ea57cc3f7dd1ccf5336a23ec1286" value="befc1da27527f6b6dd9aed5744f70359">';

preg_match_all("#name=[\"|'][^\"|']+[\"|']\s+value=[\"|']([^\"|']+)[\"|']#i", $results, $match);
print_r($match);


ว่าแต่ไปตอบใน php.deeserver.net ให้แล้วนะ  :P

ปล. ไปนอนล่ะ บายย  :)