สอบถามเกี่ยวกับการดึงข้อความครับช่วยหน่อยครับ
ตัวแปร 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 เลยครับ ผมส่งค่าเปล่าๆมาให้ หรือว่าในตัวแปรใส่ตัวแปรซ้อนไม่ได้ครับและผมต้องแก้ยังไง
ตอบเท่าที่รู้ละกันครับ เพราะแต่ก่อนมันก็เป็นปัญหากับผมเหมือนกัน
strpos และ substr นี่ผมใช้ตอนที่ยังใช้ regex ไม่เป็น มันยุ่งยากไปหน่อย พอใช้ regex ได้นิดๆหน่อยก็ลืมไปเลย :-[
ผมพูดถึง ข้างล่างแระกัน
ดูใน pattern ของ regex แล้วรู้สึกว่า ไม่จำเป็นต้องใช้ s mode นะคับ เพราะถ้าข้อมูลมันอยู่ในบรรทัดเดียวก็ไม่ต้องระบุโหมดไปก็ได้ครับ (จริงๆน่าจะลอง preg_match_all ดูก่อนก้ได้นะ)
อีกนิดนึง ถ้าชนิดของข้อมูลที่จะ match นั้นมี charactor class ที่มีรูปแบบตายตัว ก็น่าจะระบุไปด้วย จะทำงานได้ไวขึ้น อย่างตัวอย่างนี้ คิดว่าน่าจะมี charator class อยู่ 2 อย่างคือ ตัวพิมพ์เล็กกับตัวเลข
เราก็ใช้ ([a-z0-9]*) แทน (.*) จะทำให้ทำงานได้ชัดเจนกว่า (มั้ง)
ลองดูนะเพราะผมก็ขามั่วคนนึง :-[
จัดให้! แบบ 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
ปล. ไปนอนล่ะ บายย :)