尝试捕获name =和value = US或NONE(如果selected =“selected”,则不包括在内)。鉴于以下内容(较大的$ page的一部分):
$page = '
<select name="country" ><option value="NONE">Select One</option>
<option value="AE">UNITED ARAB EMIRATES</option>
<option value="GB">UNITED KINGDOM</option>
<option value="US" selected="selected">UNITED STATES</option>
<option value="UY">URUGUAY</option>
<option value="UZ">UZBEKISTAN</option>
<option value="ZW">ZIMBABWE</option></select>';
编辑1如果未选择任何选项,则此模式将不会取消。
$pattern = '/select name="([a-zA-Z]*)"\s?>[\w\W]*value="([A-Z]{2,4})"(selected="selected">)?/'
所以,我正在寻找一种能够实现的模式。
答案 0 :(得分:1)
php中if,then,else正则表达式的语法是:
(if 'selected=' found) then find pattern | else find this pattern
(if condition) then regex | else regex
(?(?=.*selected=)value="([A-Z]+)"\s+selected=|value="(NONE)">)
.*
是条件成立的必要条件。
答案 1 :(得分:0)
它必须是一个正则表达式吗?
我建议这样拆分:
这种方法的好处是你正在处理html代码的一部分,而且它更不容易出错。
修改强>
顺便说一句:你怎么知道它永远不会评估为真?它似乎按预期工作(即匹配'select'或'select name =“country”)这里是http://www.pagecolumn.com/tool/pregtest.htm(你需要转义引号(?(?=selected=\"selected\")select|select name=\"([a-zA-Z]*)\")
才能在那里使用它)
<强> EDIT2 强>
如果不是,我仍然无法帮助您,但根据您的解释,我可以建议:
<select name="([^"]*)".*?(?!</select>)<option value="[^"]*" selected="selected"|<select name="([^"]*)"\s*>\s*<option value="([^"]*)">