替换引号但保持英寸

时间:2013-09-09 10:30:56

标签: php regex

我的文字如下:Senkatel Maximus 10.1“”White“

我想删除引号,但保留引用英寸规格10.1“

我尝试使用正则表达式,但它不支持可变长度负向前瞻

这: Senkatel Maximus 10.1" "White"

应该成为: Senkatel Maximus 10.1" White

我需要它作为剥离引号而不会删除文本中的英寸的一般解决方案,因此Senkatel Maximus 10.1" "Moonlight blue""Senkatel Maximus 10.1""之类的内容也应该可行。

4 个答案:

答案 0 :(得分:2)

看起来可以使用

完成工作
preg_replace('/"(\S*?)"/', '$1', $string);

这将从字符串的任何非空白部分周围删除引号。假设在单个引号(应该保留)和任何引号对(应该被删除)之间出现至少一个空白字符,并且引号对不包含任何空格,它应该可以正常工作。

答案 1 :(得分:2)

以下适用于本页提及的大多数情况:

$newStr = preg_replace('#(^|[^0-9])"([^"]+)"#','$1$2',$str);

(部分)测试结果:

"test" Senkatel "woo69" 2"-5" Maximus 10.1" "White"
test Senkatel woo69 2"-5" Maximus 10.1" White

Product: "Senkatel Maximus 10.1""
Product: Senkatel Maximus 10.1"

Dims: 4" x 6"
Dims: 4" x 6"

"Film: 300"
Film: 300

如果字符串中间有英寸,则会出现问题  "Senkatel 10.1" Maximus" - 此时需要更复杂的代码集。这可能是功能最多的最简单的代码。

答案 2 :(得分:2)

这将删除任何不在数字

之后的qoute
preg_replace('/([^0-9])"/', '$1', $string);

但如果文字是这样的:Senkatel Maximus 10.1" "White 1000" 它会变成:Senkatel Maximus 10.1" White 1000"

很难区分带引号和英寸规格的数字

答案 3 :(得分:1)

我想你可以试试这个:

"(\S(?:\s(?:\d+(?:\.\d+)?)"|[^"])+\S)"

并替换为$1

我在一些样品上测试了它。 regex101 demo

编辑:

如果你必须删除Dims: A" x B"之类的字符串中的引号(即只有数字后跟双引号,除非在"Film: 300"之类的情况下,那么你可以使用一个正则表达式像SmokeyPHP一样,并添加我上面提到的部分来表达:

(^|[^0-9])"((\b\d+(?:\.\d+)?"|[^"])+)"

部分样本已经过测试here。 (注意,在演示中添加了\n,因为正在对几个字符串进行正则表达式测试,并且可以在逐个字符串的基础上进行测试时将其删除。)