1

カスタムタグを含む文字列がたくさんあります:

hello {RT|12} world {RT|465} this is {RT|13243}a string with{RT|13}examples

形式 {RT|xx} のすべての数のタグを除外するには、正規表現が必要です。xx は任意の長さの数値です。私は正規表現が苦手なので、次のことを試しています。

preg_match("/{RT|.*}/", $string, $matches)

これで {RT|xx} タグが除外されますが、$matches を保持するために必要なのは araay(12, 456, 13243, 13) です。誰が私を助けることができますか?

4

2 に答える 2

2

@Qtax十分な担当者がいないため、あなたの回答にコメントすることはできませんが、彼はパイプをエスケープする必要があると思いますので、正規表現は彼が望むテキストと正確に一致します

preg_match_all('/{RT\|(\d+)}/', $string, $matches, PREG_PATTERN_ORDER)

@Qtaxの回答に対する投稿者のコメントの後に編集: @revellerは私が投稿したようにあなたの正規表現を変更してください。パイプの後に '(\d+)}' があり、最初の一致には値をキャッチするグループがないため、空の文字列が返されます。

私が投稿したように変更すると、テキスト全体が一致するため、一度だけ取得し、必要な番号を取得できます。

その発生により、パイプ '|' が発生します on regex は OR を意味するため、「{RT」OR '(\d+)}' に一致します。2 回一致しないようにするには、パイプをエスケープして、正規表現がテキストとして一致するようにする必要があります。

このサイトは、正規表現をテストするのに適した場所です。テストしたいテキストと正規表現を別のサイトに置くだけで、それが機能していることを簡単に確認できます。

于 2012-04-06T14:30:50.650 に答える
2

以下を使用できます。

preg_match_all('/{RT\|(\d+)}/', $string, $matches)

そして、あなたが望む値は になります$matches[1]

于 2012-04-06T14:19:49.577 に答える