簡體   English   中英

preg_replace() 的正則表達式將 url 推入 id 標簽不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM