如果,那么,否则正则表达式 - 如何写条件

时间:2012-04-25 17:07:18

标签: php regex

尝试捕获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">)?/'

所以,我正在寻找一种能够实现的模式。

2 个答案:

答案 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)

它必须是一个正则表达式吗?

我建议这样拆分:

  • 匹配元素
  • 使用“已选择”属性的
  • 的tryMatch
  • 根据结果继续 - 当你想要哪个值时,我不确定逻辑是什么,因为你的描述并不完全不符合。但无论哪种方式,都应该很容易获得值或名称属性。

这种方法的好处是你正在处理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="([^"]*)">
  • 所以,选择了tryMatch,如果失败则只匹配第一个选项