Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.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
Regex&;PHPUnit断言:计算单词在重复模式中匹配的次数_Php_Html_Phpunit - Fatal编程技术网

Regex&;PHPUnit断言:计算单词在重复模式中匹配的次数

Regex&;PHPUnit断言:计算单词在重复模式中匹配的次数,php,html,phpunit,Php,Html,Phpunit,我使用PHPUnit测试一个PHP函数的输出,该函数使用提供的数据生成HTMLoption标记 例如,这是函数的正确输出(我添加了行返回以提高可读性): 选择一个。。。 食品价值 barValue 市价 为了测试输出,我使用以下断言: $this->assertRegExp("/(<option value=\".*\" *(selected)? *>.*<\/option>)+/i", $res); $this->assertRegExp(“/(.*)+/i”

我使用PHPUnit测试一个PHP函数的输出,该函数使用提供的数据生成HTML
option
标记

例如,这是函数的正确输出(我添加了行返回以提高可读性):

选择一个。。。
食品价值
barValue
市价
为了测试输出,我使用以下断言:

$this->assertRegExp("/(<option value=\".*\" *(selected)? *>.*<\/option>)+/i", $res);
$this->assertRegExp(“/(.*)+/i”,$res);
其中,
$res
是测试函数的输出字符串

而且效果很好。但我还要检查
选中的
是否仅在一个
选项中生成

我该怎么做?有没有办法计算所选
匹配的次数


提前谢谢,请客气,这是我的第一个问题,所以:-)

不要使用正则表达式解析HTML或XML文档。使用DOM解析器:

// create a document object from the HTML string
$doc = new DOMDocument();
$doc->loadHTML($html);

// create a XPath selector
$selector = new DOMXPath($doc);

// select nodes containing the selected attribute
$result = $selector->query('//*[@selected]');

// make assertion
$this->assertEquals(1, $result->length, 'Failed to assert that result contains exactly one selected element');

谢谢,它可以工作,但是除了这个断言之外,我还需要保留当前的断言,以确保
选项
标记的格式正确,对吗?我是否可以仅使用DOM解析器执行整个检查(最终在多个断言中)?我必须承认我从来没有使用过这些……通过调用
$doc->loadHTML()
已经完成了基本的格式良好的检查。您应该声明该方法不返回
false
。当然,您可以自由执行其他检查,如检查选项数量、值和ID…感谢您的帮助!它对我真的很有用!
// create a document object from the HTML string
$doc = new DOMDocument();
$doc->loadHTML($html);

// create a XPath selector
$selector = new DOMXPath($doc);

// select nodes containing the selected attribute
$result = $selector->query('//*[@selected]');

// make assertion
$this->assertEquals(1, $result->length, 'Failed to assert that result contains exactly one selected element');