我一直在想,是否可以使用正则表达式对每两个单词进行分组?我用1个字:
((?:\w'|\w|-)+)
这很有效。但我需要它2(或更晚的话)。
但如果我使用这个:
((?:\w'|\w|-)+) ((?:\w'|\w|-)+)
它会组成2组,但不是我想要的。当它遇到一个特殊的字符时,它将重新开始。
让我举个例子:
如果我在此文字上使用它:This is an . example text using & my / Regex expression
它会成群
This is
example text
regex expression
我想要这样的团体:
This is
is an
an example
example text
text using
using my
my regex
regex expression
如果它在a之后重置是没关系的。因此,例如它不会与hello . guys
匹配。
这甚至可以实现吗?我刚开始尝试使用RegEx,所以我不太清楚这种可能性。
如果这是不可能的,你能否指出我应该对我的问题采取的方向?
提前致谢!
答案 0 :(得分:2)
正则表达式对此有些过分。只需收集单词,然后创建对:
$a = array('one', 'two', 'three', 'four');
$pairs = array();
$prev = null;
foreach($a as $word) {
if ($prev !== null) {
$pairs[] = "$prev $word";
}
$prev = $word;
}
答案 1 :(得分:1)
试试这个
$samp = "This is an . example text using & my / Regex expression";
//removes anything other than alphabets
$samp = preg_replace('/[^A-Z ]/i', "", $samp);
//removes extra spaces
$samp = str_replace(" "," ",$samp);
//the following code splits the sentence into words
$jk = explode(" ",$samp);
$i = sizeof($jk);
$j = 0;
//this combines words in desired format
$array="";
for($j=0;$j<$i-1;$j++)
{
$array[] = $jk[$j]." ".$jk[$j+1];
}
print_r($array);
修改强>
您的问题
我已经改变了这样的正则表达式:&#34; / [^ A-Z0-9 - &#39; ] I&#34 /;所以它没有 把你喜欢的词弄得一团糟'#t;&#39;和#9岁的&#39;例如。但通过做 当有一个单独的 - 或者&#39;在我的文中,它会对待那些 作为一个单独的话。我知道为什么会这样做但是可以预防吗?
像这样改变正则表达式
preg_replace('/[^A-Z0-9 ]+[^A-Z0-9\'-]/i', "", $samp)
答案 2 :(得分:0)
首先,删除非单词字符(将\W
替换为''
)然后执行您的匹配。通过分解它们可以使许多问题变得更简单。正则表达式也不例外。
或者,删除非单词字符,将空格压缩到单个空格中,然后在空格上使用explode
,并array_chunk
将单词分组成对。