簡體   English   中英

PHP正則表達式返回 <option>價值觀

[英]PHP regex to return <option> values

我只是想知道您是否可以通過一些我想在php中完成的小任務來幫助我。

我的文件中的文本看起來像這樣:

    (random html)
    ...
    <OPTION VALUE="195" SELECTED>Physical Chem  
    <OPTION VALUE="239">Physical Chem Lab II  
    <OPTION VALUE="555">Physical Chem for Engineers            
    ...
    (random html)

我想返回選項值的#值,而忽略其他所有內容。 例如,在上述情況下,我希望返回195、239和555,其他都沒有,例如“ Option Value =“。

我在使用PHP時遇到麻煩。 到目前為止,我有這個:

preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
        print_r($matches);  

用這個的返回值:

數組([0] => OPTION VALUE =“ 195 [1] => 195)數組([0] => OPTION VALUE =” 195 [1] => 195)

我該如何退回所有的#號?

我是模式匹配的新手,我讀過的教程並沒有太大幫助,所以非常感謝!

preg_match將返回僅包含第一個匹配項的數組。 數組的第一個索引將返回完整正則表達式的匹配項,第二個索引將匹配括號中的捕獲組,請嘗試以下操作以了解其工作原理:

preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches);
    print_r($matches);

您將看到它輸出以下內容:

Array
(
    [0] => OPTION VALUE="195
    [1] => OPTION
    [2] => 195
)

數組[0]包含完全匹配的數據,數組[1]包含來自第一個捕獲組(OPTION)的數據,數組[2]包含來自第二個捕獲組([0-9] *)的數據。

為了匹配多個事件,您需要使用preg_match_all函數。 如果我們將其應用到您的原始代碼中,如下所示:

preg_match_all("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
    print_r($matches);

我們得到:

Array
(
    [0] => Array
        (
            [0] => OPTION VALUE="195
            [1] => OPTION VALUE="239
            [2] => OPTION VALUE="555
        )

    [1] => Array
        (
            [0] => 195
            [1] => 239
            [2] => 555
        )

)

我希望這可以使事情變得清楚!

我認為您做對了。 PHP會在[0]中返回完全匹配項,然后將捕獲的組(括號)作為其他組。

檢查一下: http : //xrg.es/#15m7krv

嘗試這個:

preg_match_all('/OPTION VALUE=\\"([0-9])+\\"/', $data, $matches);

編輯

誤解了你的問題。 更改為preg_match_all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM