我有這條線
a[link], a[link] a [link] text text text a [link] text a[link] text
所以我想找到文本之前的第一個鏈接并對它們進行一次操作并以特殊樣式突出顯示它們(在此示例中,可能或多或少有三個)并找到文本之后的其他鏈接并突出顯示他們的風格不同。
我只能找到前三個鏈接,但我不知道自己做得如何
<?php
$re = '/^(a\[(\w [\s ]?) \],?\s?) /iu';
$str = 'a[link], a[link] a[link] text text text a[link] text a[link] text';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
var_dump($matches);
?>
uj5u.com熱心網友回復:
不要試圖一次匹配所有內容。分別匹配每個鏈接,然后遍歷結果。用于preg_match_all此目的,或者preg_replace_callback如果您想在每場比賽中進行替換。使用:
a\[(\w )\]
應該實作你的目標。
目前還不清楚[\s ]?目標是什么,可以選擇允許空格或 s。也不清楚鏈接后的可選逗號和空格。保持簡單是最好的方法。
https://3v4l.org/2AvT1
uj5u.com熱心網友回復:
使用 php,您可以使用\G錨點,然后使用 2 個捕獲組來了解開頭的行與其他鏈接之間的區別。
\Ga\h*\[([^][]*)],?\h*|\[([^][]*)]
解釋
\G在字串的開頭或上一個匹配項的末尾斷言當前位置a\h*匹配a和可選的水平空白字符\[([^][]*)]在第 1 組中匹配[...]并捕獲方括號之間的內容,?\h*匹配可選的逗號和水平空白字符|或者\[([^][]*)]在第 2 組中匹配[...]并捕獲方括號之間的內容
請參閱正則運算式演示。
uj5u.com熱心網友回復:
我現在將嘗試給出一個說明性的例子來說明需要什么:有這樣一個文本
a[link1], a[link2] a[link3] text text text a[link4] text a[link5] text
在這篇文章中有一些鏈接被指定為 a[ ] 將來我需要替換這些鏈接并將其帶到這個表格中
<a href="link1" >link1</a><a href="link2" >link2</a><a href="link3" >link3 </a> 文本文本文本 <a href="link4" >link4</a> 文本 <a href="link5" >link5</a> 文本
前三個鏈接有一個分配了值 style1 的類 文本之后的鏈接已經有一個分配給 style2 的類值 一開始,文本之前可以有三個鏈接,四個甚至一個,以及之后文本中可以有任意數量的任意順序的鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535560.html
標籤:PHP正则表达式
下一篇:字串可選部分的正則運算式
