Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Regex 正则表达式匹配并替换由某些字符分隔的单词_Regex_Preg Replace - Fatal编程技术网

Regex 正则表达式匹配并替换由某些字符分隔的单词

Regex 正则表达式匹配并替换由某些字符分隔的单词,regex,preg-replace,Regex,Preg Replace,我需要一点帮助来匹配和替换正则表达式 <comma|dash|fullstop|questionmark|exclamation mark|space|start-of-string>WORD<comma|dash|fullstop|space|end-of-string> WORD 我需要找到一个特定的单词(不区分大小写),它 前面有:逗号、破折号、句号、问号、感叹号、空格或字符串开头 后跟:逗号、破折号、句号、问号、感叹号、空格或字符串结尾 测试字符串: 匹配我,

我需要一点帮助来匹配和替换正则表达式

<comma|dash|fullstop|questionmark|exclamation mark|space|start-of-string>WORD<comma|dash|fullstop|space|end-of-string>
WORD
我需要找到一个特定的单词(不区分大小写),它

前面有:逗号、破折号、句号、问号、感叹号、空格或字符串开头

后跟:逗号、破折号、句号、问号、感叹号、空格或字符串结尾

测试字符串: 匹配我,是的,请匹配我,但不要匹配!匹配我,当然匹配,最后匹配


我想用PHP中的另一个字符串替换所有匹配项,所以我可能需要使用preg_REPLACE或其他什么

下面是一个PHP实现,它将完成您描述的任务。它将用“单词”替换所有单词


试试这个

$input = "MATCH me, yes please,MATCH me but dontMATCHme!MATCH me and of course MATCH, and finally MATCH";

echo($input."<br/>");
$result = preg_replace("/
                      (?:^             # Match the start of the string
                      |(?<=[-,.?! ]))  # OR look if there is one of these chars before
                      match            # The searched word
                      (?=([-,.?! ]|$)) # look that one of those chars or the end of the line is following
                      /imx",           # Case independent, multiline and extended
                      "WORD", $input);
echo($result);
$input=“匹配我,是的,请匹配我,但不要匹配!匹配我,当然匹配,最后匹配”;
回声($input.“
”); $result=preg_replace(“/ (?:^#匹配字符串的开头
|(?这并不完全符合您的要求,但可能更好地满足您的实际需求(我猜这是“仅当
MATCH
是一个完整的单词,而不是另一个单词的一部分时,才将
MATCH
替换为
WORD
):

\b
是仅在字母数字单词的开头或结尾匹配的单词边界锚定

结果:

WORD me, yes please,WORD me but dontMATCHme!WORD me and of course WORD, and finally WORD

是的,“单词”(字母、数字和下划线)的定义对我来说没问题。我如何用这种方法替换一个特定的单词?我设法解决了这个问题,我想出了这个(警告:我不知道这个方法有多有效,而且我还没有彻底测试过):eregi_replace(“([-\,\+\?()\$[];\=])。$oldvalue.([-\,\+\?()\$[];[]]),“\\1”“$newvalue.”\\2“,$string);如果有人能将此转换为preg_replace,我将不胜感激…如果有人能帮我解决,我将此问题发布在这里:(我将此作为评论发布,因为5小时内我不会自行回答)我用一个正常工作的php webapp更新了这个示例。试用一下,看看它是否符合您的需要。此外,我认为如果单词在一行的开头或结尾,您的正则表达式将不起作用。感谢您的回答Sky Kelsey,这与您描述的相符,但不幸的是,我需要替换一个特定的单词,而不仅仅是所有的单词!嗯……关于t我的regexp,你是对的,如果单词在字符串的开头,它将不起作用,也不会在字符串的结尾…我仍在尝试解决这个问题…所以也许可以修改你的问题并指定你要查找的单词?
$input = 'MATCH me, yes please,MATCH me but dontMATCHme!MATCH me and of course MATCH, and finally MATCH'
$result = preg_replace('/\bMATCH\b/i', "WORD", $input)
WORD me, yes please,WORD me but dontMATCHme!WORD me and of course WORD, and finally WORD