1

我无法弄清楚如何在 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 函数的正则表达式来完成吗?到目前为止,我只设法删除了第一次出现“,”和“...”之间的所有文本,但这不是我想要的。:(

“garbage here”字符串中不会有额外的逗号或“...”...此外,“...”并不总是有尾随“,”。可能只是“这里有更多的垃圾”

我只有 PHP 可用于此任务。可以做到吗?今天下午我拿起一本正则表达式书,但到目前为止,我还没有找到任何可以完全实现我想要完成的东西。

任何帮助将不胜感激。

4

3 回答 3

3

您应该能够使用以下正则表达式:

(^|,)[^,]*\.{3}

用空字符串替换匹配项。

解释:

(^|,)    # match a ',' or at the start of the string
[^,]*    # match any number of characters that are not ','
\.{3}    # match three '.' characters
于 2012-12-13T00:25:35.363 回答
0

除了你的书,看看这个教程

您可以在它之前和之后匹配...尽可能多的非,字符(我们将使用否定字符类表示)(尽可能多,非常简单,因为重复是贪婪的):

$string = preg_replace('/[^,]*[.]{3}[^,]*/', '', $string);

现在的问题只是剩下的逗号。我会简单地删除,,字符串开头或结尾的双引号和逗号:

$string = preg_replace('/^,+|,+(?=,)|,+$/', '', $string);

工作演示。

在一个正则表达式中完成所有操作可能会变得棘手,因为您需要处理三种情况:前导元素包含...(删除尾随,),中心元素包含...(删除周围之一,)和尾随元素包含...(删除前导,)。

于 2012-12-13T00:27:38.043 回答
0

它是高度具体的,但应该这样做:

$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);
于 2012-12-13T00:34:05.980 回答