首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对每个相同的单词(regex,php)放置一个破折号。

对每个相同的单词(regex,php)放置一个破折号。
EN

Stack Overflow用户
提问于 2020-11-16 12:02:38
回答 2查看 38关注 0票数 2

请告诉我是否可以通过rejax搜索所有相同的单词,并在它们之间插入一个破折号,直到这个词不再是句子中的下一个单词为止。

这里的例子:https://regex101.com/r/1GQiQ8/2

我的审判官:

代码语言:javascript
复制
(\blong\b|\banyword\b)(-| )(\blong\b|\banyword\b)

样本文本:

代码语言:javascript
复制
test text long long test text
test text long long long long long long test text
test text long long test test long long long test text

应如何:

代码语言:javascript
复制
test text long-long-long-long-long-long test text
test text long-long test test long-long-long test text

现在它是如何工作的:

代码语言:javascript
复制
test text long-long test text
test text long-long long-long long-long test text
test text long-long test test long-long long test text
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-16 12:08:32

您可以使用

代码语言:javascript
复制
\b(long|anyword)\b\K[- ](?=(?:(?1))\b)

-代替。见regex演示

如果单词必须相同,使用\1而不是(?1)

代码语言:javascript
复制
\b(long|anyword)\b\K[- ](?=\1\b)

请参阅这个regex演示

详细信息

  • \b(long|anyword)\b -第1组:两个单词中的任何一个,作为一个整体
  • \K -匹配重置操作符,它从匹配内存缓冲区中移除所有匹配的文本。
  • [- ] -无论是连字符还是空格
  • (?=(?:(?1))\b) -一个积极的前瞻性,它匹配一个位置,紧跟在一个完整的longanyword单词后面。
  • (?=\1\b) -一个正的前瞻性,它匹配一个位置,紧跟在第1组中捕获的字符串作为一个整体。
票数 1
EN

Stack Overflow用户

发布于 2020-11-16 12:09:43

简单的foreach()循环也将完成这项工作:

代码语言:javascript
复制
<?php

$string = 'test text long long test text';

$array = explode(' ',$string);

$finalString = '';
foreach($array as $key=> $arr){
    if($key ==0){
        $finalString = $arr;
    }else{
        if($arr == $array[$key-1]){
            $finalString .='-'.$arr;
        }else{
             $finalString .=' '.$arr;
        }
        
    }
    
}
echo $finalString;

输出:https://3v4l.org/FVSRUhttps://3v4l.org/jso3U

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

https://stackoverflow.com/questions/64857659

复制
相关文章

相似问题

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