用于删除起始和结束引号之间空格的正则表达式(PHP)
我想删除空格,如果它们显示在qotes中名称的开头或结尾。让我详细解释一下这个例子: 这就是我得到的结果: 理发师一人一事 头发工作室二号S.P。 理发师3人-3人S.P 这就是我想要实现的目标: 理发师一人一事 头发工作室二号S.P。 理发师3人-3人S.P 这是我正在研究的代码:用于删除起始和结束引号之间空格的正则表达式(PHP),php,regex,Php,Regex,我想删除空格,如果它们显示在qotes中名称的开头或结尾。让我详细解释一下这个例子: 这就是我得到的结果: 理发师一人一事 头发工作室二号S.P。 理发师3人-3人S.P 这就是我想要实现的目标: 理发师一人一事 头发工作室二号S.P。 理发师3人-3人S.P 这是我正在研究的代码: $data[$num]['title'] = preg_replace(????????, "",$row->find('td',1)->plaintext); 如果你有更好的解决方案,我愿意接受。
$data[$num]['title'] = preg_replace(????????, "",$row->find('td',1)->plaintext);
如果你有更好的解决方案,我愿意接受。
提前谢谢你们
$strings = array
(
'" HAIRDRESSER PERSON 1" Person one businesses',
'" HAIR STUDIO " Person two S.P.',
'" HAIRDRESSER PERSON 3 " - PERSON 3 S.P'
);
foreach($strings as $string) {
var_dump($string);
$string = preg_replace_callback('/"(.*)"/i', function($match) { return sprintf('"%s"', trim($match[1])); }, $string);
var_dump($string);
}
返回
string '" HAIRDRESSER PERSON 1" Person one businesses' (length=45)
string '"HAIRDRESSER PERSON 1" Person one businesses' (length=44)
string '" HAIR STUDIO " Person two S.P.' (length=31)
string '"HAIR STUDIO" Person two S.P.' (length=29)
string '" HAIRDRESSER PERSON 3 " - PERSON 3 S.P' (length=43)
string '"HAIRDRESSER PERSON 3" - PERSON 3 S.P' (length=37)
返回
string '" HAIRDRESSER PERSON 1" Person one businesses' (length=45)
string '"HAIRDRESSER PERSON 1" Person one businesses' (length=44)
string '" HAIR STUDIO " Person two S.P.' (length=31)
string '"HAIR STUDIO" Person two S.P.' (length=29)
string '" HAIRDRESSER PERSON 3 " - PERSON 3 S.P' (length=43)
string '"HAIRDRESSER PERSON 3" - PERSON 3 S.P' (length=37)
您可以在trim函数中使用preg_replace或preg_replace_回调
echo preg_replace_callback('~"(.*?)"~', function($matches) {
return '"' . trim($matches[1]) . '"';
}, '"HAIRDRESSER PERSON 1" Person one businesses');
输出:
理发师一人一事
输出:
理发师一人一事
\h*是与下一个之间任意数量的水平空白。Regex101演示:
这里可能不需要preg_replace_回调,除非您想进一步操作引用的数据。您可以使用preg_replace或preg_replace_回调函数和trim函数
echo preg_replace_callback('~"(.*?)"~', function($matches) {
return '"' . trim($matches[1]) . '"';
}, '"HAIRDRESSER PERSON 1" Person one businesses');
输出:
理发师一人一事
输出:
理发师一人一事
\h*是与下一个之间任意数量的水平空白。Regex101演示:
这里可能不需要preg_replace_回调,除非您想进一步操作引用的数据。一个简单的解决方案就是欺骗它
str_replace('" ','"',$string);
一个简单的解决方案就是欺骗它
str_replace('" ','"',$string);
只搜索需要修剪的引用文本是不安全的,例如:abcd efgh ijkl使用这种方法和幼稚的模式可能会有问题 一种可能的方法是搜索所有引用的零件,并使用preg_replace_回调对其进行修剪: 这种方式的优点是所使用的模式非常简单 您还可以避免preg_replace_回调,但需要一种更复杂的模式:
$data[$num]['title'] = preg_replace('~"\s*+([^\s"]*(?:\s+[^\s"]+)*+)\s*"~', '"$1"', $row->find('td', 1)->plaintext);
请注意,这两种模式假设引号是平衡的,并且引用的部分不包含转义引号。仅搜索需要修剪的引用文本是不安全的。例如:abcd efgh ijkl使用这种方法和简单的模式可能会有问题 一种可能的方法是搜索所有引用的零件,并使用preg_replace_回调对其进行修剪: 这种方式的优点是所使用的模式非常简单 您还可以避免preg_replace_回调,但需要一种更复杂的模式:
$data[$num]['title'] = preg_replace('~"\s*+([^\s"]*(?:\s+[^\s"]+)*+)\s*"~', '"$1"', $row->find('td', 1)->plaintext);
请注意,这两种模式假设引号是平衡的,并且被引用的部分不包含转义引号。我在javascript中使用了下面的reg表达式,它可以工作
replace(/(\"\s+)|(\s+\")/g,"\"")
我在javascript中使用了下面的reg表达式,它可以正常工作
replace(/(\"\s+)|(\s+\")/g,"\"")
你能用带花括号的代码标记图片,向我们展示你所拥有的和你想要实现的吗?您的问题中有很多和标记,我不确定您添加这些和标记是出于格式化目的还是实际存在/为了改进您的问题,请添加当前解决方案的错误说明,它是否会产生错误的输出,它会抛出任何错误吗?你能用代码标记这个带大括号的图像来告诉我们你有什么以及你想要实现什么吗?你的问题中有很多和标记,我不确定你添加它们是否出于格式化目的,或者它们是否确实存在/为了改进你的问题,请添加一个描述,说明你当前的解决方案有什么问题,它是否创建了错误的输出,它是否抛出任何错误?第二个是为我做的!谢谢第二个为我做的!非常感谢。