2

コンテンツで次のショートコードの最初の出現を見つけて、ショートコードの url パラメータを取得するスクリプトを書いています。

ショートコードはこんな感じ

[soundcloud url="http://api.soundcloud.com/tracks/106046968"]

そして、私が現在行っていることは

$pattern = get_shortcode_regex();
  $matches = array();
  preg_match("/$pattern/s", get_the_content(), $matches);
  print_r($matches);

結果は次のようになります

Array (
    [0] => [soundcloud url="http://api.soundcloud.com/tracks/106046968"]
    [1] =>
    [2] => soundcloud
    [3] => url="http://api.soundcloud.com/tracks/106046968"
    [4] =>
    [5] =>
    [6] =>
)

これは、ショートコードのパラメーターのURLが必要な文字列です

$html = 'Our good homies <a href="https://www.facebook.com/yungskeeter">DJ Skeet Skeet aka Yung Skeeter</a> &amp; <a href="https://www.facebook.com/WaxMotif">Wax Motif</a> have teamed up to do a colossal 2-track EP and we\'re getting the exclusive sneak-premiere of the EP\'s diabolical techno b-side called "Hush Hush" before its released tomorrow on <a href="https://www.facebook.com/dimmakrecs">Dim Mak Records</a>!

[soundcloud url="http://api.soundcloud.com/tracks/104477594"]
<a href="https://www.facebook.com/WaxMotif">Wax Motif</a> have teamed up to do a colossal 2-track EP and we\'re getting the exclusive sneak-premiere of the EP\'s diabolical techno b-side called "Hush Hush" before its released tomorrow on <a href="https://www.facebook.com/dimmakrecs">Dim Mak Records</a>!
';

これは最善の方法ではないと思います。これを行う方法を教えていただければ、それは素晴らしいことです。基本的に、コンテンツから最初に出現した soundcloud url を抽出したいと考えています。

4

1 に答える 1

1

だからここに私が思いついたものがあります:

preg_match('~\[soundcloud\s+url\s*=\s*("|\')(?<url>.*?)\1\s*\]~i', $input, $m); // match

print_r($m); // print matches (groups) ...
$url = isset($m['url']) ? $m['url']:''; // if the url doesn't exist then return empty string
echo 'The url is : ' . $url; // Just some output

正規表現を説明しましょう:

~                   # set ~ as delimiter
\[soundcloud        # match [soundcloud
\s+                 # match a whitespace 1 or more times
url                 # match url
\s*                 # match a whitespace 0 or more times
=                   # match =
\s*                 # match a whitespace 0 or more times
("|\')              # match either a double quote or a single quote and put it in group 1
(?<url>.*?)         # match everything ungreedy until group 1 is found and put it in a named group "url"
\1                  # match what was matched in group 1
\s*                 # match a whitespace 0 or more times
\]                  # match ]
~                   # delimiter (end expression)
i                   # set the i modifier, which means match case-insensitive

Online PHP demo                 Online regex demo

于 2013-08-28T12:47:11.717 に答える