PHP:用里面的jolly char替换字符串

时间:2013-12-24 01:59:11

标签: php regex replace char

我需要php中正则表达式的帮助...字符串替换中的“jolly char”。这就是我现在所拥有的:

$String = str_replace('<audio type="soundcloud">'.
    '[soundcloud url="https://api.soundcloud.com/tracks/',
    '<audio type="soundcloud">', $String);

$String = str_replace(' params="color=ff6600&auto_play=false&'.      
    'show_artwork=true" width="100%" height="166" iframe="true" /]</audio>',
    '</audio>', $String);

输入是:

[soundcloud url="https://api.soundcloud.com/tracks/audio_id" params="color=ff6600&auto_play=false&show_artwork=true" width="100%" height="166" iframe="true" /]

输出是:

<audio type="soundcloud">audio_id</audio>

只有当param保持不变(我希望匹配任何param值)时才可以。

现在,我正试图用正则表达式解决它。

这是我想要替换的:

[soundcloud url="https://api.soundcloud.com/tracks/audio_id" params="*]

...为了拥有这个:

<audio type="soundcloud">audio_id</audio>

(目前我不需要保存任何参数)

所以,我必须在params =“和]之间删除任何字符。

有人能帮助我吗? 我保证在下一个愚蠢的问题之前我会学习! :)


编辑#1:

我为我不明确的问题道歉,我试图以另一种方式解释它。 这就是我输入的内容:

[soundcloud url="https://api.soundcloud.com/tracks/123456789" params="color=ff6600&auto_play=false&show_artwork=true" width="100%" height="166" iframe="true" /]

这就是我需要的输出:

<audio type="soundcloud">123456789</audio>

......其中:

  • “123456789”更改并且必须保存。
  • 我必须在“params”和“]”(包括)之间删除所有文本。

我想我需要一个FINAL标记,所以我必须在正则表达式的某处写“params”......


编辑#2:

这是我的最后一次尝试:

$String = preg_replace('\<audio type="soundcloud"\>\[soundcloud url=\"https\:\/\/api.soundcloud.com\/tracks\/([^"]+).*.\<\/audio\>', '<audio type="soundcloud">\1</audio>', $String);

...它适用于regex101.com演示,但它不在我的页面中。


编辑#3:

固定! 当然你的答案是正确的...我在编辑#2中遇到了两个丢失斜线的问题!

这是正确的版本:

$String = preg_replace('/\<audio type=\"soundcloud\"\>\[soundcloud url=\"https\:\/\/api.soundcloud.com\/tracks\/([^"]+).*.\<\/audio\>/', '<audio type="soundcloud">\1</audio>', $String);

非常感谢你的帮助......和新年快乐!

2 个答案:

答案 0 :(得分:0)

您的正则表达式为\[soundcloud url="https://api\.soundcloud\.com/tracks/([^"]*?)"([^\]]*?)\]

您可以像这样使用preg_replace

$String = preg_replace('/\\[soundcloud url="https:\/\/api\\.soundcloud\\.com\/tracks\/([^"]*?)"([^\]]*?)\\]/',
    '<audio type="soundcloud">$\1</audio>')

答案 1 :(得分:0)

<强>正则表达式

好吧,你可以使用以下模式提取audio_id,然后用<audio type="soundcloud">\1</audio>替换整个输入,其中\1是提取的audio_id

/.*?tracks\/([^"]+).*/

Working DEMO

说明:

  .*?                      any character except \n (0 or more times
                           (matching the least amount possible))
--------------------------------------------------------------------------------
  tracks                   'tracks'
--------------------------------------------------------------------------------
  \/                       '/'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^"]+                    any character except: '"' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))

PHP代码

<?
    $input = '[soundcloud url="https://api.soundcloud.com/tracks/audio_id" params="*]';

    $pattern = '/.*?tracks\/([^"]+).*/';

    $replacement= '<audio type="soundcloud">\1</audio>';

    $ouptput = preg_replace($pattern, $replacement, $input);

    echo htmlentities($ouptput);
?>

Live DEMO

HTML解析

最后,我不知道这是否是你使用正则表达式来解析HTML代码的唯一情况,但是请考虑使用更合适的工具......有很多HTML解析器(一个)最好的是PHP Simple HTML DOM Parser)......

如果您仍然询问原因,请查看HERE