首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串拆分为双字符串,忽略某些标签

将字符串拆分为双字符串,忽略某些标签
EN

Stack Overflow用户
提问于 2012-02-10 08:30:33
回答 2查看 823关注 0票数 6

考虑以下字符串:

代码语言:javascript
运行
复制
I have had the greatest {A} {B} day yesterday {C}

我想创建一个具有二元语法的数组,忽略所有标签(标签在{括号}之间)

代码语言:javascript
运行
复制
[0] => I-have
[1] => have-had
[2] => had-the
[3] => the-greatest
[4] => greatest-day
[5] => day-yesterday

在PHP中,最好的方法是什么?使用正则表达式或在“”上爆炸,然后迭代所有单词?我在开始的时候遇到了麻烦,所以如果有任何帮助,我将非常感激:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 08:59:17

使用explode可以让它变得非常简单:

代码语言:javascript
运行
复制
$string="I have had the greatest {A} {B} day yesterday {C}";

$words=explode(" ",$string);

$filtered_words=array();

foreach($words as $w)
{
  if(!preg_match("/{.*}/",$w))
  {
    array_push($filtered_words,$w);
  }
}


$output=array();

foreach(range(0,count($filtered_words)-2) as $i)
{
  array_push($output,$filtered_words[$i] . "-" . $filtered_words[$i+1]);
}

var_dump($output);

输出为:

代码语言:javascript
运行
复制
array(6) {
  [0]=>
  string(6) "I-have"
  [1]=>
  string(8) "have-had"
  [2]=>
  string(7) "had-the"
  [3]=>
  string(12) "the-greatest"
  [4]=>
  string(12) "greatest-day"
  [5]=>
  string(13) "day-yesterday"
}
票数 2
EN

Stack Overflow用户

发布于 2012-02-10 09:10:49

略有不同的方法:

代码语言:javascript
运行
复制
$string = '{D} I have had the greatest {A} {B} day yesterday {C}';

// explode on spaces
$arr = explode(' ', $string);
$bigrams = array();

// remove all "labels" with regex (assuming it matches \w)
$arr = array_values(array_filter($arr, function($s){
    return !preg_match("/\{\w\}/", $s);
}));

// get the bigrams
$len = count($arr);
for ($i = 0; $i <= $len - 2; $i++) {
    $bigrams[] = $arr[$i] . '-' . $arr[$i+1];
}

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

https://stackoverflow.com/questions/9221092

复制
相关文章

相似问题

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