请告诉我是否可以通过rejax搜索所有相同的单词,并在它们之间插入一个破折号,直到这个词不再是句子中的下一个单词为止。
这里的例子:https://regex101.com/r/1GQiQ8/2
我的审判官:
(\blong\b|\banyword\b)(-| )(\blong\b|\banyword\b)样本文本:
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应如何:
test text long-long-long-long-long-long test text
test text long-long test test long-long-long test text现在它是如何工作的:
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发布于 2020-11-16 12:08:32
您可以使用
\b(long|anyword)\b\K[- ](?=(?:(?1))\b)用-代替。见regex演示。
如果单词必须相同,使用\1而不是(?1)
\b(long|anyword)\b\K[- ](?=\1\b)请参阅这个regex演示
详细信息
\b(long|anyword)\b -第1组:两个单词中的任何一个,作为一个整体\K -匹配重置操作符,它从匹配内存缓冲区中移除所有匹配的文本。[- ] -无论是连字符还是空格(?=(?:(?1))\b) -一个积极的前瞻性,它匹配一个位置,紧跟在一个完整的long或anyword单词后面。(?=\1\b) -一个正的前瞻性,它匹配一个位置,紧跟在第1组中捕获的字符串作为一个整体。发布于 2020-11-16 12:09:43
简单的foreach()循环也将完成这项工作:
<?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://stackoverflow.com/questions/64857659
复制相似问题