有个应用,使用已经给出的单词或词组进行组句,前提是只能使用给出的这些,每个可以多次使用,但是不能不用。
举个简单的例子,比如给的如下:aaa,bbb,ccc,ddd,eee
那么像
“aaa eee ddd ddd ccc bbb”ok
“aaa bbb ccc ddd” fail eee没有出现
“aaa eee ddd ddd ccc bbb other” fail other不是给出的
“aaabbb” fail aaabbb不是给出的
根据给的这个最简单例子,求个正则,
剩下的我就照着写就会了。
举个简单的例子,比如给的如下:aaa,bbb,ccc,ddd,eee
那么像
“aaa eee ddd ddd ccc bbb”ok
“aaa bbb ccc ddd” fail eee没有出现
“aaa eee ddd ddd ccc bbb other” fail other不是给出的
“aaabbb” fail aaabbb不是给出的
根据给的这个最简单例子,求个正则,
剩下的我就照着写就会了。
$str = 'aaa eee ddd ddd ccc bbb aaa eee ddd ';
#$str = 'aaa eee ddd ddd ccc bbb aaa eee ddd';//ok
#$str = 'aaa eee ddd ddd ccc aaa eee ddd';//failed
#$str = 'aaa eee ddd ddd ccc bbbs aaa eee ddd';//failed
#$str = 'aaa eee ddd ddd ccc bbb aaa eee ddd';//failed
#$str = 'aaa aaa aaa aaa aaa aaa aaa';//failed
#$str = 'aaabbbccc aaa bbb ddd';//failed
preg_match('/^(?:(?:(aaa)|(bbb)|(ccc)|(ddd)|(eee))(?: |\b)){5,}(?(1)|(?!))(?(2)|(?!))(?(3)|(?!))(?(4)|(?!))(?(5)|(?!))$/', $str, $matches);
var_dump($matches);真想不通这个应用的用途所在……
class word extends TTrie {
public $savematch = 0; function __construct() {
$this->set(' ');
}
function match($s) {
$this->buffer = array();
parent::match($s);
return $this->buffer;
}
}$s = 'aaa bbb ccc ddd';
//$s = 'aaa eee ddd ddd ccc bbb other';
$p = new word();$d = array('aaa','bbb','ccc','ddd','eee');
$r = $p->match($s);
print_r( array_merge(array_diff($d, $r), array_diff($r, $d)));
终于找到老大的trie完整实例了。