我的文字如下: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""
之类的内容也应该可行。
答案 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)
这将删除任何不在数字
之后的qoutepreg_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
,因为正在对几个字符串进行正则表达式测试,并且可以在逐个字符串的基础上进行测试时将其删除。)