[英]regex for preg_replace() tweet url into id tag not working
我有下一個字符串
$string= "
https://twitter.com/AdamaUK_/status/1262730246668922885
text
https://twitter.com/wheat_daddy/status/1262629949908885511?s=20
text
https://twitter.com/AdamaUK_/status/1262730246668922885
text
https://twitter.com/wheat_daddy/status/1262629949908885511?s=30
";
我想通過preg_replace()
它
<div id='1262730246668922885'></div> text
<div id='1262629949908885511'></div> text
<div id='1262730246668922885'></div> text
<div id='1262629949908885511'></div> text
我試過到目前為止沒有成功
$pattern = "/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|twitter+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/";
function getTweet($string) {
return preg_replace($pattern, "<div id='$1'></div>", $string);
}
如何從 twitter url 獲取 id 並用div
標簽成功替換它? 謝謝你。
可能有很多模式,取決於你的大腦是如何工作的。 我只想查找 twitter 部分,然后在/status/
之后獲取數字:
$result = preg_replace('~https?://twitter\.com/.*?/status/(\d+).*~', "<div id='$1'></div>", $string);
為什么這么復雜?
$pattern = '#https?:\/\/|www\d{0,3}[.]|twitter\.com\/([^\/]+)\/status\/(.+)#';
$1 是用戶名,$2 是狀態 ID。
不確定這是否是您正在尋找的,但我認為
<div id='1262730246668922885'>text</div>
好於
<div id='1262730246668922885'></div> text
下面還根據要求刪除了?s=20。
這是我用來測試表達式的腳本:
<?php
$string= "
https://twitter.com/AdamaUK_/status/1262730246668922885
text
https://twitter.com/wheat_daddy/status/1262629949908885511?s=20
text
https://twitter.com/AdamaUK_/status/1262730246668922885
text
https://twitter.com/wheat_daddy/status/1262629949908885511?s=30
# Also caters for optional http, https and www:
https://www.twitter.com/AdamaUK_/status/1262730246668922885
text
http://www.twitter.com/AdamaUK_/status/1262730246668922885
text
http://twitter.com/AdamaUK_/status/1262730246668922885
text
www.twitter.com/AdamaUK_/status/1262730246668922885
text
twitter.com/AdamaUK_/status/1262730246668922885
text
";
$pattern = "~(?:https?:\/\/)?(?:www\.)?twitter\.com\/[^\/]+/status/(\d+)(?:.+)?~";
echo preg_replace($pattern, "<div id='$1'></div>", $string);
echo "Version where the text is inside the div (Just thinking <div id='1262730246668922885'>text</div> is better than <div id='1262730246668922885'></div> text)";
$pattern = "~(?:https?:\/\/)?(?:www\.)?twitter\.com\/[^\/]+/status/(\d+)(?:.+)?\R(.+)?~m";
echo preg_replace($pattern, "<div id='$1'>$2</div>", $string);
?>
在命令行上執行時的結果:
$ php -f test.php
<div id='1262730246668922885'></div>
text
<div id='1262629949908885511'></div>
text
<div id='1262730246668922885'></div>
text
<div id='1262629949908885511'></div>
# Also caters for optional http, https and www:
<div id='1262730246668922885'></div>
text
<div id='1262730246668922885'></div>
text
<div id='1262730246668922885'></div>
text
<div id='1262730246668922885'></div>
text
<div id='1262730246668922885'></div>
text
Version where the text is inside the div (Just thinking <div id='1262730246668922885'>text</div> is better than <div id='1262730246668922885'></div> text)
<div id='1262730246668922885'>text</div>
<div id='1262629949908885511'>text</div>
<div id='1262730246668922885'>text</div>
<div id='1262629949908885511'></div>
# Also caters for optional http, https and www:
<div id='1262730246668922885'>text</div>
<div id='1262730246668922885'>text</div>
<div id='1262730246668922885'>text</div>
<div id='1262730246668922885'>text</div>
<div id='1262730246668922885'>text</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.