首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在php中仅替换被空格包围的文本

如何在php中仅替换被空格包围的文本
EN

Stack Overflow用户
提问于 2018-06-24 08:01:15
回答 1查看 356关注 0票数 1

我正在尝试创建一个表单,用户可以提交并使用它来查找和替换长字符串中的文本。然而,我要替换的许多字符串只有2-3个字母(例如"od","ph"),它们经常出现在单词的中间。我希望遍历我正在搜索的所有短语,并仅在字符串前有空格时才替换它们,以避免替换位于单词中间的字符串。有什么想法吗?

代码语言:javascript
复制
if(isset($_POST["text"]))
{
    $original = $_POST["text"];
    $abbreviation= array();
    $abbreviation[0] = 'od';
    $abbreviation[1] = 'rn';        
    $abbreviation[2] = 'ph';
    $abbreviation[3] = 'real';  
    $translated= array();
    $translated[0] ='odometer';
    $translated[1] ='run';
    $translated[2] ='pinhole';
    $translated[3] ='fake';
    $newtext=  str_ireplace ($abbreviation, $translated ,$original);
    echo nl2br(htmlspecialchars($newnote));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-24 08:09:09

您可以在两侧使用单词边界断言(\b)将缩写作为单独的单词处理:

代码语言:javascript
复制
preg_replace('/\bod\b/i', 'odometer', 'od test od test od.')
// "odometer test odometer test odometer."

如果严格要求仅当字符串周围有空格时才进行匹配,请使用匹配空格(\s)的后视断言((?<=)和超前断言((?=):

代码语言:javascript
复制
preg_replace('/(^|(?<=\s))od((?=\s)|$)/i', 'odometer', 'od test od test od.')
// "odometer test odometer test od."

请注意尾随句点是如何不同地处理的。(还要注意,preg_replace可以将多个模式/替换映射作为数组。)

docs

单词边界是主题字符串中当前字符和前一个字符不同时匹配\w或\W的位置(即一个匹配\w,另一个匹配\W),或者如果第一个或最后一个字符分别匹配\w,则为字符串的开头或结尾。

\w\W指的是“单词”和“非单词”字符:

"word“字符是任何字母或数字或下划线字符,也就是说,可以是Perl "word”的任何字符。字母和数字的定义由PCRE的字符表控制,如果发生特定于区域设置的匹配,则可能会有所不同。例如,在"fr“(法语)区域设置中,一些大于128的字符代码用于重音字母,这些字符代码由\w.

匹配

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51005953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档