我需要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>
......其中:
我想我需要一个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);
非常感谢你的帮助......和新年快乐!
答案 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\/([^"]+).*/
说明:
.*? 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);
?>
HTML解析
最后,我不知道这是否是你使用正则表达式来解析HTML代码的唯一情况,但是请考虑使用更合适的工具......有很多HTML解析器(一个)最好的是PHP Simple HTML DOM Parser)......
如果您仍然询问原因,请查看HERE。