【问题标题】:Using regex to insert a space in a string in php使用正则表达式在php中的字符串中插入空格
【发布时间】:2011-09-24 20:10:14
【问题描述】:

我的字符串格式不正确,正在尝试纠正它。字符串的一个例子是:-

A 某人(美国)B 没人(美国)

我正在尝试将其更正为:-

A 某人(美国) B 没人(美国)

我正在使用下面的代码来匹配“)”后跟一个大写字母,并使用 php 的 preg_replace 函数进行匹配并添加空格。但是我在正则表达式上完全是垃圾,无法在正确的位置添加空间。

$regex = "([\)][A-Z])";
$replacement = ") $0";
    $str = preg_replace($regex, $replacement, $output);

谁能推荐一个更好的方法?我意识到空间没有添加正确,因为 $0 包含我匹配的数据,有没有办法操纵 $0?

【问题讨论】:

  • $0 是捕获组零,即 ([\)][A-Z]),只需像这样移动括号 [\)]([A-Z]) 并使用 $1 我认为。
  • 我不认为有一个捕获组 $1,我已经尝试过了,它切断了大写字母,因此产生了 A Somebody(US)Nobody(US) 的输出。跨度>

标签: php regex string preg-replace


【解决方案1】:
$str = preg_replace('/(?<=\))(?=\p{Lu})/u', ' ', $output);

在右括号 (\)) 和大写字母 (\p{Lu}) 之间插入一个空格。你根本不需要$0(或$1等),因为你只是在两个字符之间的位置插入一些东西,而这个正则表达式正好匹配这个(零宽度)位置。查看lookaround assertions

【讨论】:

  • 你会如何适应这个小写字母在大写字母之前没有空格?我试过 /(?
  • 您的意思是“在小写字母和大写字母之间插入一个空格”吗? $str = preg_replace('/(?&lt;=\p{Ll})(?=\p{Lu})/u', ' ', $output);
【解决方案2】:

正则表达式怎么样="(?&lt;=\))[A-Z]"
和替换=" $0"

【讨论】:

  • 这个正则表达式在与 preg_replace 一起使用时会导致未知修饰符“[”错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2018-10-24
  • 1970-01-01
  • 2019-09-04
相关资源
最近更新 更多