2

文字列には 3 つのバージョンがあります。

  1. [center][thumb]http://some_domain.com/uploads/posts/2010-04/1271272006_tn.jpg[/thumb][/center]
  2. [center][img]http://some_domain.com/uploads/posts/2012-01/1325796885.jpg[/img][/center]
  3. [img]http://some_domain.com/uploads/posts/2012-01/1325796885.jpg[/img]

[left][/left]また、またはにすることもできます[right][/right]。経由/\[(center|left|right)\]\[(img|thumb)\](.*)?\[(\/img|\/thumb)\]\[(\/center|\/left|\/right)\]/で選択した最初の 2 つですが、3 つ目は 1 つの問題です。「前の」が存在しないかどうかを確認する方法は?

PS URLのみを取得する必要があります。

4

3 に答える 3

2

それらの「タグ」を削除してみませんか?

$buffer = strtr($input, array('[' => '<', ']' => '>'));
$url = strip_tags($buffer);

strtrドキュメントドキュメントを参照してくださいstrip_tags

あなたの3つの例では、これは次のとおりです。

http://some_domain.com/uploads/posts/2010-04/1271272006_tn.jpg
http://some_domain.com/uploads/posts/2012-01/1325796885.jpg
http://some_domain.com/uploads/posts/2012-01/1325796885.jpg
于 2013-01-08T00:11:24.307 に答える
0

すべての[*]「タグ」を削除しようとしている場合は、次のようにすることができます。

$tag_replace_pattern = '#\[.*\]#U'; // note 'U' pattern modifier for ungreedy search
$url = preg_replace($tag_replace_pattern, '', $original_string);

特定のパターンのみを削除する必要がある場合は、これを使用できます。

$tag_replace_pattern = '#\[/?(thumb|left|center|right|img)\]#U';
$url = preg_replace($tag_replace_pattern, '', $original_string);
于 2013-01-08T00:20:44.907 に答える
0

よりシンプルで洗練されていないもの:

$str = '[center][img]http://some_domain.com/uploads/posts/2012-01/1325796885.jpg[/img][/center]';

$url = preg_replace('/.*?(http.+?)\[\/.*+/', "$1", $str);
于 2013-01-08T00:11:32.067 に答える