删除2个字符之间但有条件的文本

时间:2013-02-21 16:54:43

标签: php

我需要删除此字符串中的文字:

  

bca.pzb。 (4-86)11,52 -eleven和fiftytwo -

我需要移除-eleven and fiftytwo-并离开bca.pzb. (4-86) 11,52

我试着用preg_match和其他方法研究如何做到这一点,但我不知道如何识别“ - ”......“ - ”和“ - ”之间的文本。在“(4-86)”中。

如何删除“ - ”之间的文字但忽略“(4-86)”中的“ - ”?

感谢任何人的提示。

编辑:

感谢您的所有答案!根据要求,我在这里报告更多数据。我用这种方式格式化了所有文本行,当然它们可以改变数字和字符串,但它们都是这样的:

54 pzt. 9,42 -nine and fortytwo-
66 pzt. 6,54 -six and fiftyfour-
23 pzt. 4,62 -four and sixtytwo -
dxd.pzt.(7-8) 15,17 -fifteen and seventeen-
dxd.pzt.(1-5) 5,84 -five and eightyfour-
dxd.pzt.(4-8) 29,92 -twentynine and ninetytwo-
dxd.pzt.(5-3) 4,61 -four and sixtyone-
dxd.pzt.(4-1) 4,42 -four and fourtytwo- 

每次加载某个网页时,我都有200条这样的行。

我需要删除第二部分中的文本,其中数字写为单词,并留下第一部分。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

由于您只提供了一个示例,我只能猜测您要删除的内容。但是,你可以尝试这个,它删除连字符包围的最右边的文本,以及它前面的单个空格:

$string = 'bca.pzb. (4-86) 11,52 -eleven and fiftytwo-';
$removed = preg_replace('/ -[^-]*-$/', '', $string);

答案 1 :(得分:2)

echo preg_replace("/-([^-]+)-$/", "", 'bca.pzb. (4-86) 11,52 -eleven and fiftytwo-');

答案 2 :(得分:0)

我认为你可以尝试类似的东西:

的preg_match( '/-(.*)-/ S',$ HTML,$ content_arr);

结果将在$ content_arr

答案 3 :(得分:0)

一种可能性是在短划线之间搜索字母数字字符+空格:

$text = preg_replace('/\-[\w\s]+\-/', '', $originalText);

它会起作用,但它会删除所有匹配项,例如-some text-,所以如果行格式不同,你可能会遇到麻烦