用于删除开始和结束引用之间的空格的正则表达式(PHP)

时间:2015-09-30 12:48:39

标签: php regex

如果在qotes内的名称的开头或结尾显示空格,我想删除空格。让我解释一下例子:

这是我的结果:
“HAIRDRESSER PERSON 1”第一人称企业 “头发工作室”第二人称S.P “理发师3” - PERSON 3 S.P.

这就是我想要实现的目标:
“HAIRDRESSER PERSON 1”第一人称企业 “头发工作室”第二人称S.P “理发师3” - PERSON 3 S.P.

这是我正在处理的代码:

$data[$num]['title'] = preg_replace(????????, "",$row->find('td',1)->plaintext);

如果您有更好的解决方案,那么preg_replace我会打开它。 提前谢谢你们。

5 个答案:

答案 0 :(得分:2)

您可以将preg_replacepreg_replace_callbacktrim功能结合使用。

echo preg_replace_callback('~"(.*?)"~', function($matches) {
                                    return '"' . trim($matches[1]) . '"';
                            }, '"HAIRDRESSER PERSON 1" Person one businesses');

输出:

  

"理发师1"人员一个企业

echo preg_replace('~"\h*(.*?)\h*"~', '"$1"', '"HAIRDRESSER PERSON 1" Person one businesses');

输出:

  

"理发师1"人员一个企业

\h*"和下一个"之间的任意数量的水平空格。 Regex101演示:https://regex101.com/r/mG2eG9/1

除非您想进一步操纵引用的数据,否则此处可能不需要preg_replace_callback

答案 1 :(得分:2)

仅搜索需要修剪的引用文本是不安全的(例如:"abcd" efgh " ijkl "使用此方法和天真模式可能会出现问题。)

一种可能的方法是搜索所有引用的部分并使用preg_replace_callback修剪它们:

$data[$num]['title'] = preg_replace_callback('~"([^"]*)"~', function ($m) {
    return '"' . trim($m[1]) . '"'; }, $row->find('td', 1)->plaintext);

这种方式的优点是使用的模式非常简单。

您也可以避免使用preg_replace_callback但需要更复杂的模式:

$data[$num]['title'] = preg_replace('~"\s*+([^\s"]*(?:\s+[^\s"]+)*+)\s*"~', '"$1"', $row->find('td', 1)->plaintext);

请注意,这两种模式假设引号是平衡的,引用的部分不包含转义引号。

答案 2 :(得分:2)

我在javascript中使用了以下reg表达式,它可以正常工作

 replace(/(\"\s+)|(\s+\")/g,"\"")

答案 3 :(得分:1)

>>> for indexTag in (0, 1):
...     print 'indexTag:', indexTag
...     print 'boolean not:', not indexTag
...     print 'subtraction:', 1 - indexTag
...     print 'conditional expression:', 0 if indexTag else 1
...     print
... 
indexTag: 0
boolean not: True
subtraction: 1
conditional expression: 1

indexTag: 1
boolean not: False
subtraction: 0
conditional expression: 0

返回

$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);
}

答案 4 :(得分:1)

一个简单的解决方案就是欺骗它。

  str_replace('" ','"',$string);