2012-04-25 267 views
2

尝试捕获名称=和值=美国或无(如果选择=“选定”不包括在内)。鉴于以下(较大$页面的一部分):如果,那么,否则正则表达式 - 如何写条件

$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这种模式,如果没有的选项被选中不会拿起NONE。

$pattern = '/select name="([a-zA-Z]*)"\s?>[\w\W]*value="([A-Z]{2,4})"(selected="selected">)?/' 

所以,我正在寻找一种模式。

+6

使用HTML解析器,而不是正则表达式。 – nickb 2012-04-25 17:09:12

+1

没有'name'属性... – powtac 2012-04-25 17:09:47

+1

谢谢nickb,我已经读了很多。问题是关于正则表达式。更具体地说,关于持续的非真实结果。有什么建议? – David 2012-04-25 17:18:15

回答

1

的语法那么,如果在PHP否则正则表达式是:

(if 'selected=' found) then find pattern  | else find this pattern 
    (if condition)  then regex   | else regex 
(?(?=.*selected=)value="([A-Z]+)"\s+selected=|value="(NONE)">) 

.*是必要的条件是真实的。

0

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

我建议这样拆分起来:

  • 匹配的元素
  • tryMatch的“选择”属性
  • 根据结果进行 - 我不知道是什么当你想要哪个值的时候,逻辑和你的描述不太相同。但无论哪种方式,获取价值或名称属性都应该很容易。

这种方法的好处是你正在研究html代码的一部分,而且它的错误更少。

编辑:

BTW:你怎么知道它永远不会计算为真?它似乎工作打算(即符合“选择”或“选择名称=‘国家’)在这里
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选择,如果失败的比赛只是第一个选项
+0

我打算了解if条件。自发布问题以来,我已开始着手处理您的建议。对我来说,使用|有一个长的正则表达式是很好的在选择之间。 – David 2012-04-25 19:56:15

+0

谢谢乔安娜。请参阅我的编辑1.根据预先选定的内容,希望获得名称=“(国家)”和值=“(美国)”或值=“(无)”的模式。所需捕获字符的括号。 – David 2012-04-25 20:04:42

+0

关于if语法,我一定是用错了。使用您提供的转义字符串,结果总是“其他”一方。我正在创建'if',因为我无法让其他人(编辑1)工作。无论哪种方式都很好。只要寻找'名字'和'价值'。 – David 2012-04-25 20:25:40