1

価格情報の文字列に対して単純な正規表現を試していますが、preg_match_allそれがどうあるべきかがわかりません。

たとえば、通貨記号がHTMLエンティティとしてエンコードされている可能性がある例を探しています。たとえば、GBP$**.**または£**.**££

preg_match_allHTMLエンティティの検索に使用することに問題がありますか?

これが私が試していることです:

$price = preg_match_all(
    '#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#', 
    $string, 
    $matches
);

しかし、私は次のようになります:不明な修飾子「1」

4

1 に答える 1

2

ここにいくつかの明らかなエラーがあります:

1) preg_match_all()少なくとも3つのパラメータを想定しているため、

preg_match_all(
    '#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#', 
    $string, 
    $matches
);

$matches変数には、一致した文字列が含まれます。$priceパターンが一致した回数が含まれます。詳細については、 http://php.net/preg_match_allを参照してください。

2)エスケープされていない区切り文字があります:

'#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#'
 ^                       ^                    ^
 Start                   Unescaped            End

これらの2つの問題を修正すると、解析エラーなしでコードが実行されます。また、一致するエンティティに関する文字通りの質問にも答える必要があります。

ただし、正規表現があなたがやろうとしていることを達成しているとは思えません。価格は常に記載されているわけではありません[CurrencySymbol][Amount]。たとえば、ユーロは通常100€または100€と表記されます。したがって、記号の前の数字と後の空白も確認する必要があります。

于 2012-10-02T08:18:04.333 に答える