我目前正在使用preg_replace
来替换html链接中提到的主题标签,如下所示。问题是有可能会有html代码以及被检查。因此,color: #000000;
之类的某些CSS会强制它尝试将该十六进制代码转换为链接。
如果一个单词的最后一个字母是;
,我基本上需要我的正则表达式来忽略任何preg_replace。这就是我目前所拥有的:
$str = preg_replace('/#([a-zA-Z0-9!_%]+)/', '<a href="http://example.com/tags/$1">#$1</a>', $str);
示例输入:'I like #action movies!'
预期输出:I like <a href="http://example.com/tags/action">#action</a> movies!'
我无法使用字符串的结尾来检查这一点,因为在任何给定时间都会检查文本块,因此提供的字符串可能是#computer text text text #computer
。
感谢任何帮助。
答案 0 :(得分:1)
直到一个regEx guru来救你(如果有的话......)并且因为你是PHP的;这是一个几行代码的解决方案。
$str="hi #def; #abc #ghi"; // just a test case (first one need be skipped)
if (preg_match_all('/#([a-zA-Z0-9!_%]+.?)/', $str,$m)){
foreach($m[1] as $k) if(substr($k,-1)!=';') {
$k=trim($k);
$str=str_replace("#$k","<a href='http://wxample.com/tags/$k'>#$k</a>",$str);
}
}
print "$str\n";
答案 1 :(得分:1)
在正则表达式中,您可以检查标签旁边是否有;非字母数字,行尾或字符串结尾:
/#([a-zA-Z0-9!_%]+)([^;\w]{1}|$)/
然后相应地使用$ 1和$ 2
'<a href="http://example.com/tags/$1">#$1</a>$2'
您的代码看起来像
$str = preg_replace('/#([a-zA-Z0-9!_%]+)([^;\w]{1}|$)/', '<a href="http://example.com/tags/$1">#$1</a>$2',$str);
在这里你可以看到一些测试:https://regex101.com/r/yN4tJ6/65
答案 2 :(得分:0)
你可以添加一个条件来检查最后一个字符串是什么;或不使用它。 示例:
if (substr($str, -1)==';'){
//do nothing
}
else {
$str = preg_replace('/#([a-zA-Z0-9!_%]+)/', '<a href="http://example.com/tags/$1">#$1</a>', $str);
}
希望得到这个帮助。
答案 3 :(得分:0)
嗯,你可以使用下面的代码,实际上我是正则表达式的新手,所以它不是那么专业,但它有效,这里是
$data = "<p style='color:#00000;'>Heloo</p> #computer text text text #computer #say #goo1d #sd! #say_hello";
echo preg_replace("/(?<!\:)(\s+)\#([\w]+)(?!\;)/",'<a href="http://example.com/tags/$2">#$2</a>',$data);
这个表达式我用过
/(?<!\:)(\s+)\#([\w]+)(?!\;)/
输出
<p style='color:#00000;'>Heloo</p> <a href="http://example.com/tags/computer">#computer</a> text text text <a href="http://example.com/tags/computer">#computer</a> <a href="http://example.com/tags/say">#say</a> <a href="http://example.com/tags/goo1d">#goo1d</a> <a href="http://example.com/tags/sd">#sd</a>! <a href="http://example.com/tags/say_hello">#say_hello</a>
我希望它有所帮助。
答案 4 :(得分:0)
这个正则表达式应该有效:
{
"links": [{
"href": "https://api.paypal.com/v1/payments/sale/36C38912MN9658832",
"rel": "self",
"method": "GET"
}, {
"href": "https://api.paypal.com/v1/payments/sale/36C38912MN9658832/refund",
"rel": "refund",
"method": "POST"
}, {
"href": "https://api.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI",
"rel": "parent_payment",
"method": "GET"
}]
}
演示:https://regex101.com/r/KrRiD3/2
您的PHP代码:
#([\w!%]+(?=[\s,!?.\n]|$))
输出: