Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何";regex“;选择菜单中的所有选项_Php_Regex_Select_Options_Capture - Fatal编程技术网

Php 如何";regex“;选择菜单中的所有选项

Php 如何";regex“;选择菜单中的所有选项,php,regex,select,options,capture,Php,Regex,Select,Options,Capture,样本数据如下: 50x80斯托克:0 60x110斯托克:0 70x140斯托克:0 80吨约鲁克斯托克:2 80x150斯托克:23 只需通过([\s\s]*?)更改(.*) 因此,完整的regexp应该是:([\s\s]*?) 与新行不匹配,因此您可以使用与任何内容匹配的[\s\s] 一旦你有了选择你想要的。使用额外的正则表达式value=“.*?(\d+(?:x\d+)”>。*Stok:(\d+)获取大小和库存值(第一个和第二个捕获组) 例如: <?php $re = '/&l

样本数据如下:


50x80斯托克:0
60x110斯托克:0
70x140斯托克:0
80吨约鲁克斯托克:2
80x150斯托克:23
只需通过
([\s\s]*?)更改
(.*)

因此,完整的regexp应该是:
([\s\s]*?)

与新行不匹配,因此您可以使用与任何内容匹配的
[\s\s]

一旦你有了
选择你想要的
。使用额外的正则表达式
value=“.*?(\d+(?:x\d+)”>。*Stok:(\d+)
获取大小和库存值(第一个和第二个捕获组)

例如:

<?php
$re = '/<select name="ctl00\$ContentPlaceHolder1\$UrunListesi\$ctrl([0-9]{1,2})\$StokBoyut" id="ctl00_ContentPlaceHolder1_UrunListesi_ctrl([0-9]{1,2})_StokBoyut">([\s\S]*?)<\/select>/mi';
$str = '
<select name="ctl00$ContentPlaceHolder1$UrunListesi$ctrl0$StokBoyut" id="ctl00_ContentPlaceHolder1_UrunListesi_ctrl0_StokBoyut">
<option value="900061_50x80">50x80 Stok:0</option>
<option value="900067_60x110">60x110 Stok:0</option>
<option value="900037_70x140">70x140 Stok:0</option>
<option value="356593_80 T.Yolluk">80 T.Yolluk Stok:2</option>
<option value="356552_80x150">80x150 Stok:23</option>
</select>

<select>
<option value="dontwantthis">xxxx</option>
</select>

<select name="ctl00$ContentPlaceHolder1$UrunListesi$ctrl0$StokBoyut" id="ctl00_ContentPlaceHolder1_UrunListesi_ctrl0_StokBoyut">
<option value="900061_50x80">50x80 Stok:0</option>
<option value="900067_60x110">60x110 Stok:0</option>
<option value="900037_70x140">70x140 Stok:0</option>
<option value="356593_80 T.Yolluk">80 T.Yolluk Stok:2</option>
<option value="356552_80x150">80x150 Stok:23</option>
</select>

';

preg_match_all($re, $str, $matches);

foreach ($matches[0] as $select) {
    print "I like this select:______________\n";
    print $select . "\n";
    print "The values are:**********\n";
    preg_match_all('/value=".*?_(\d+(?:x\d+)?)[^"]*">.*?Stok:(\d+)/', $select, $values, PREG_SET_ORDER);
    foreach ($values as $value) {
        print "  - $value[1] and Stock=$value[2]\n";
    }
    print "\n\n";
}

应尝试使用
DOMDocument
对象

<?php

$html = '<select name="ctl00$ContentPlaceHolder1$UrunListesi$ctrl0$StokBoyut" id="ctl00_ContentPlaceHolder1_UrunListesi_ctrl0_StokBoyut">
<option value="900061_50x80">50x80 Stok:0</option>
<option value="900067_60x110">60x110 Stok:0</option>
<option value="900037_70x140">70x140 Stok:0</option>
<option value="356593_80 T.Yolluk">80 T.Yolluk Stok:2</option>
<option value="356552_80x150">80x150 Stok:23</option>
</select>';
$html  = '<html>'. $html . '</html>';

/*** a new dom object ***/
$dom = new DOMDocument();

/*** load the html into the object ***/
$dom->loadHTML($html);
$pattern = '@\d+x\d+@s'; // Format: (number)x(number)
$stokPattern = '@(Stok:)\d+@s';
foreach ($dom->getElementsByTagName('option') as $row) {
    $attributeValue = $row->getAttribute('value');
    preg_match_all($pattern, $attributeValue);
    if (preg_match($pattern, $attributeValue, $match)) {
        echo $match[0] . '<br/>';
    }

    $text = $row->textContent;
    if (preg_match($stokPattern, $text, $match)) {
        echo $match[0] . '<br/>';
    }
    //echo $row->getAttribute('value') . '<br/>'; //Get value
    //echo $row->textContent . '<br/>'; // Get text
}

当使用DOMDocument会容易得多的时候,为什么要使用regexp?…一些html和regex之类的东西。。。非常感谢。有办法提取选项中的数据吗?我更新了答案,添加了一个关于如何提取值的示例
<?php

$html = '<select name="ctl00$ContentPlaceHolder1$UrunListesi$ctrl0$StokBoyut" id="ctl00_ContentPlaceHolder1_UrunListesi_ctrl0_StokBoyut">
<option value="900061_50x80">50x80 Stok:0</option>
<option value="900067_60x110">60x110 Stok:0</option>
<option value="900037_70x140">70x140 Stok:0</option>
<option value="356593_80 T.Yolluk">80 T.Yolluk Stok:2</option>
<option value="356552_80x150">80x150 Stok:23</option>
</select>';
$html  = '<html>'. $html . '</html>';

/*** a new dom object ***/
$dom = new DOMDocument();

/*** load the html into the object ***/
$dom->loadHTML($html);
$pattern = '@\d+x\d+@s'; // Format: (number)x(number)
$stokPattern = '@(Stok:)\d+@s';
foreach ($dom->getElementsByTagName('option') as $row) {
    $attributeValue = $row->getAttribute('value');
    preg_match_all($pattern, $attributeValue);
    if (preg_match($pattern, $attributeValue, $match)) {
        echo $match[0] . '<br/>';
    }

    $text = $row->textContent;
    if (preg_match($stokPattern, $text, $match)) {
        echo $match[0] . '<br/>';
    }
    //echo $row->getAttribute('value') . '<br/>'; //Get value
    //echo $row->textContent . '<br/>'; // Get text
}
50x80
Stok:0
60x110
Stok:0
70x140
Stok:0
Stok:2
80x150
Stok:23