Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将符合条件的空格替换为_Php_Regex_Replace_Spaces - Fatal编程技术网

Php 将符合条件的空格替换为

Php 将符合条件的空格替换为,php,regex,replace,spaces,Php,Regex,Replace,Spaces,我想替换所有空格,这些空格后面只有Fig.空格数字和点 例如,如果字符串为: Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds 我想将其更改为: Fig. 1.  sasasa Fig. 34.  345 dffdfd etc. dsds 有没有办法用正则表达式来实现这一点?我尝试了regex/Fig\.\s\d+\.\s+/但它与Fig.匹配,后面跟空格,后面跟数字/s,后面

我想替换所有空格,这些空格后面只有Fig.空格数字和点

例如,如果字符串为:

Fig. 1. sasasa 
Fig. 34. 345 dffdfd etc. dsds
我想将其更改为:

Fig. 1.  sasasa 
Fig. 34.  345 dffdfd etc. dsds
有没有办法用正则表达式来实现这一点?我尝试了regex/Fig\.\s\d+\.\s+/但它与Fig.匹配,后面跟空格,后面跟数字/s,后面跟点和空格,但我只想要前面跟图案的空格

PS:我之所以想这样做,是因为我试图拆分以点和空格结尾的句子。但在一些句子中,有一些单词和数字后跟点和空格,如图1。或者Mr.etc,因此我想将这些点和空格替换为,以便正确拆分句子。

尝试此示例中的Regex和preg_replace_回调函数:

$str ='Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds';
$str = preg_replace_callback('/(Fig\.)[ ]([0-9]+[\.]{1})[ ]*/i', function($m){
  return str_ireplace(' ', ' ', $m[0]);
}, $str);

echo $str;  // Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds
或者,由此:

$str ='Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds';
$str = preg_replace_callback('/(Fig\.)[ ]([0-9]+[\.]{1})[ ]*/i', function($m){
  return str_ireplace([$m[1].' ', $m[2]], [$m[1].' ', $m[2].' '], $m[0]);
}, $str);

echo $str; // Fig. 1.  sasasa Fig. 34.  345 dffdfd etc. dsds

这是一个棘手的正则表达式来做正确的

这将与您匹配的主题字符串相匹配


全局查找:?:\A\G | Fig[\d.]*?我想你自己有一个XY问题。你真正的挑战是正确地拆分句子,但你正在变异子字符串,试图区分点和句号

虽然我更愿意把我的精力放在解决最初的问题上,但我发现其他的答案设计得过于复杂,所以我推荐一种更轻的模式

代码:

\K匹配,然后忘记Fig。。然后匹配下一个空格。然后捕捉数字和圆点。然后匹配下一个空格。替换使用捕获的子字符串并将其包装在htmlencoded空间中


我的代码片段故意替换数字和点后的空格,这样文本中就不会有多余的空格。

您能再举一个例子吗?并张贴您正在使用的相关代码。为什么没有匹配的345DFFD?否则,只需查找?:\A\G | Fig[\d.]*[],替换$1$2非常好!真不敢相信我这么快就得到了答案!。谢谢你的一大堆课程。我不太擅长使用正则表达式,但我很高兴你帮助了我,救了我一天。再次感谢!这个也行。为了简单起见,我接受了上述答案,但我非常感谢你的解释。我投了更高的票,但只有在我获得15分以上的代表分数后才会显示。谢谢你,Sln。这在所有情况下都非常有效,不仅是Fig.还有St.先生,还有我不想被dot跟在后面的任何单词。我用你的正则表达式对每个单词重复使用了多次。这个正则表达式完美地解决了我的问题!我现在接受这个答案。谢谢你的帮助。@KrishnaBasada-是的,你可以把它们组合成一个替代品。除了Fig,您可以添加任意数量的?:Fig | St | Ms | Mrs | Mr等。再次感谢回复sln。我又添加了一个条件[A-Z],以转义大写字母S.M.Jones的姓名,并将其替换为S.M.Jones。我使用了这个正则表达式:preg_replace'/?:\A\G | Fig | Mr | Mrs | St |等|[A-Z][\d.]*?
 (?:
      (?! \A )              # Not Begin of String
      \G                    # \G anchor, start where last left off
   |                      # or
                            # Reset's \G
      ( Fig )               # (1), Fig
 )
 ( [\d.]* )            # (2), Optional digits or dots
 (?<= [ .] )           # Must be a dot or space behind
 [ ]                   # space
$string = <<<STRING
Fig. 1. sasasa 
Fig. 34. 345 dffdfd etc. dsds
STRING;

echo preg_replace('~Fig\.\K (\d+\.) ~', '&nbsp;$1&nbsp;', $string);
Fig.&nbsp;1.&nbsp;sasasa 
Fig.&nbsp;34.&nbsp;345 dffdfd etc. dsds