我不知道如何在PHP (运行5.3.x)中做到这一点。
我将下面的文本字符串从一个txt文件拉到一个字符串变量中:
garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage我试图让字符串看起来像这样,并放回txt文件中是:
garbage here, more garbage here, more garbage, garbage here, more garbage here, more garbage, more garbage here, yet more garbage我想找出一种方法来找出每一个"...“然后删除"...“后面的所有文本直到它命中第一次出现的",“,但没有任何运气。使用带有preg_replace函数的正则表达式可以做到这一点吗?到目前为止,我只删除了第一次出现",“和"...”之间的所有文本。但这不是我想要的。:(
不会有额外的逗号或"...“在“垃圾在这里”字符串中...也可以是"...“并不总是有尾随的",“。它可能只是“更多...更多的垃圾”
我只有PHP可用于此任务。这是可以做到的吗?今天下午我拿起了一本正则表达式的书,但到目前为止,我还没有找到任何可以完全完成我想要完成的任务的东西。
任何帮助都将不胜感激。
发布于 2012-12-13 08:25:35
您应该能够使用以下正则表达式:
(^|,)[^,]*\.{3}将匹配项替换为空字符串。
解释:
(^|,) # match a ',' or at the start of the string
[^,]* # match any number of characters that are not ','
\.{3} # match three '.' characters发布于 2012-12-13 08:27:38
除了你的书之外,还可以看看this tutorial。
您可能只需要在它之前和之后匹配...和尽可能多的非,字符(我们将使用一个否定的字符类来表示)(尽可能多地匹配,这是非常简单的,因为重复是贪婪的):
$string = preg_replace('/[^,]*[.]{3}[^,]*/', '', $string);问题现在只剩下逗号了。我只需删除字符串开头或结尾的双,,和逗号:
$string = preg_replace('/^,+|,+(?=,)|,+$/', '', $string);Working demo.
在一个正则表达式中完成所有这一切可能会很棘手,因为您需要处理三种情况:前导元素包含... (删除尾随,),中央元素包含... (删除周围的,之一),尾随元素包含... (删除前导,)。
发布于 2012-12-13 08:34:06
它非常具体,但应该是这样的:
$string = 'garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage';
echo preg_replace('/,[^,]*\.{3}/', '', $string);https://stackoverflow.com/questions/13851006
复制相似问题