2

name=およびvalue=USまたはNONEをキャプチャしようとしています(selected = "selected"が含まれていない場合)。次の場合(より大きな$ページの一部):

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

.*、条件が true になるために必要です。

于 2012-04-28T03:03:41.673 に答える
0

1つの正規表現である必要がありますか?

このように分割することをお勧めします:

  • 要素に一致する
  • 「選択された」属性とのtryMatch
  • 結果に従って続行します-ロジックが何であるかはわかりません。どの値が必要な場合でも、説明から完全に理解できないわけではありません。ただし、どちらの方法でも、値または名前の属性を簡単に取得できるはずです。

このアプローチの利点は、htmlコードの一部で作業しているため、エラーが発生しにくいことです。

編集:

ところで:それが真と評価されないことをどうやって知っていますか?http://www.pagecolumn.com/tool/pregtest.htmここで、意図したとおりに機能しているようです(つまり、「select」または「selectname = "country"」と一致します) 。

(そこで使用するには、引用符をエスケープする必要があります(?(?=selected=\"selected\")select|select name=\"([a-zA-Z]*)\")

EDIT2

それ以外の場合、私はまだあなたを助けることができませんが、あなたの説明に基づいて私はこれを提案することができます:

<select name="([^"]*)".*?(?!</select>)<option value="[^"]*" selected="selected"|<select name="([^"]*)"\s*>\s*<option value="([^"]*)">
  • したがって、tryMatchを選択します。失敗した場合は、最初のオプションと一致します。
于 2012-04-25T19:38:32.717 に答える