0

私はたくさんのテキストを持っています、例えば:

foofoofooabcdefhjkldh389dn{pdf}images/1.pdf,100%,500{/pdf}hfnkjt8499duidjglkj

以下を抽出したいと思います。

{pdf}images/1.pdf,100%,500{/pdf}

これが私が作った正規表現です:

#{pdf}(.*?){/pdf}#

結果を確認すると、次のようになります。

Array
(
[0] => {pdf}images/1.pdf,100%,500{/pdf}
[1] => images/1.pdf,100%,500
)

配列の最初のアイテムのみを取得することを期待していましたが、代わりに2つのアイテムがあります。私はPHPを使用しており、テストには次のWebサイトを使用しています。PHP正規表現テスター

{pdf}...{/pdf}テキストのみを取得するにはどうすればよいですか?

4

3 に答える 3

3

正規表現でグループを使用します。あなたの場合、グループは

(.*?)

これにより、PHPは最初のグループで見つかった完全な結果{PDF} sometext{/PDF}とsometextを提供します。

グループを削除するには、次のことを試してください。

#{pdf}.*?{/pdf}#
于 2012-11-16T11:43:46.703 に答える
1

非キャプチャグループを使用して、中央のテキストが配列内の後方参照として表示されないようにし、ゼロ幅アサーションを使用して、{pdf}部分が一致の一部ではないことを確認します。

#(?<={pdf})(?:.*?)(?={/pdf})#

{pdf}区切り文字を保持したい場合:

#{pdf}(?:.*?){/pdf}#
于 2012-11-16T11:40:16.677 に答える
1

2つの結果はありません。

ここでの問題(ただし問題ではありません)は、おそらく関数preg_matchが使用されていることです。この関数は、一致するクエリ全体、つまり{pdf}images/1.pdf,100%,500{/pdf}、と最終結果、つまり。の両方を返しますimages/1.pdf,100%,500

$result[1]したがって、さらに解析するためにを使用する必要があるだけです。

于 2012-11-16T11:44:46.220 に答える