2

试图捕获 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 如果未选择任何选项,此模式将不会选择 NONE。

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

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

4

2 回答 2

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)">)

条件成立的.*必要条件。

于 2012-04-28T03:03:41.673 回答
0

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

我建议以这种方式拆分它:

  • 匹配元素
  • tryMatch 与“选定”属性
  • 根据结果​​进行 - 我不确定逻辑是什么,因为当你想要哪个值时,从你的描述中不太明白。但无论哪种方式,都应该很容易获得值或名称属性。

这种方法的好处是您正在处理 html 代码的一部分,而且它更不容易出错。

编辑:

顺便说一句:你怎么知道它永远不会评估为 true ?它似乎按预期工作(即匹配'select'或'select name =“country”)在这里
http://www.pagecolumn.com/tool/pregtest.htm

(您需要转义引号(?(?=selected=\"selected\")select|select name=\"([a-zA-Z]*)\")才能在此处使用它)

编辑2

如果是其他情况,我仍然无法为您提供帮助,但根据您的解释,我可以提出以下建议:

<select name="([^"]*)".*?(?!</select>)<option value="[^"]*" selected="selected"|<select name="([^"]*)"\s*>\s*<option value="([^"]*)">
  • 因此,选择 tryMatch,如果失败,则仅匹配第一个选项
于 2012-04-25T19:38:32.717 回答