我有一个字符串。一个例子可能是"联系/ u / reddit上的某人,或访问/ r / subreddit或/ r / subreddit2"
我想替换" / r / x"的任何实例。和" / u / x"用" [/r/x](http://reddit.com/r/x)
"和" [/u/x](http://reddit.com/u/x)
"基本上。
所以我不确定如何1)找到" / r /"然后将其扩展到单词的其余部分(直到那里有一个空格),然后2)取满#34; / r / x"并用我的模式替换,最重要的是3)为所有人做这个" / r /"和" / u /"匹配一次......
我知道这样做的唯一方法就是写一个函数来逐字逐句地走字符串,直到找到" /",然后寻找" r"和" /"跟随;然后一直走,直到找到一个空间。这会给我开始和结束字符,所以我可以做一个字符串替换;然后计算新的终点,并继续走绳子。
这感觉......愚蠢。我有一种感觉,这是一种相对简单的方法,而且我不知道如何谷歌获取所有相关部分。
答案 0 :(得分:0)
一个简单的preg_replace
do what you want。
尝试:
$string = preg_replace('#(/(?:u|r)/[a-zA-Z0-9_-]+)#', '[\1](http://reddit.com\1)', $string);
以下是一个示例:http://ideone.com/dvz2zB
您应该看看是否可以在Reddit名称或Reddit用户名中发现哪些字符有效,并相应地修改[a-zA-Z0-9_-]
字符集。
答案 1 :(得分:0)
在我看来,正则表达式对于这样一个简单的操作来说太过分了。如果你只想替换" / r / x"的实例与"[r/x](http://reddit.com/r/x)"
和" / u / x"使用"[/u/x](http://reddit.com/u/x)"
,您应该使用str_replace
,尽管使用preg_replace它会减少代码。
str_replace("/r/x","[/r/x](http://reddit.com/r/x)","whatever_string");
使用正则表达式复杂的搜索字符串并替换。如果你在字符串中捕获了一些复杂的东西,你也可以使用http://www.jslab.dk/tools.regex.php正则表达式生成器。
答案 2 :(得分:0)
您正在寻找正则表达式。
基本模式以固定字符串开头。 /u/
或/r/
与这些完全匹配。这可以简化为与/(?:u|r)/
匹配的一个或另一个匹配与这两个模式相同的[^ ]
。接下来,您希望匹配从该点到空间的所有内容。您将使用负字符组*
来匹配任何不是空格的字符,并应用修饰符/(?:u|r)/[^ ]*
以匹配与该组匹配的尽可能多的字符。 (?<= )
您可以进一步采用该模式并添加一个lookbehind,(?<= )/(?:u|r)/[^ ]*
以确保您的匹配前面有空格,因此您不匹配导致((?<= )/(?:u|r)/[^ ]*)
的部分。您将所有这些包装成一个捕获组\1
。这将捕获括号内的内容以允许替换模式。您可以使用[\1](http://reddit.com\1)
对第一个捕获的群组的引用preg_replace
来表达您选择的替换。
在php中,您可以将匹配模式,替换模式和主题字符串传递给{{1}}函数。