如何使随机文本php每次从{}获取新单词并创建新句子

时间:2018-11-09 17:46:17

标签: php

输入文字

{Hey|Hi|Heyy|Hii} {thanks|thanx|thank you|thank u} {for|4} {messaging|writing} me {..|...} {whatsup|whats up|whatcha up to|whatcha doin|what r ya doin|what r u up 2|what r ya up 2} ?

并需要结果链接此
Hi thanks 4 writing me ... what r ya up 2 ?
Hey thank you for writing me ... what r ya up 2 ?
Hi thanks 4 messaging me ... whatcha up to ?
Hii thanx 4 messaging me .. what r ya doin ?

每次都从{}获取随机单词并创建一个新句子

1 个答案:

答案 0 :(得分:0)

preg_replace_callback

很明显
$str = '{Hey|Hi|Heyy|Hii} {thanks|thanx|thank you|thank u} {for|4} {messaging|writing} me {..|...} {whatsup|whats up|whatcha up to|whatcha doin|what r ya doin|what r u up 2|what r ya up 2} ?';

$str = preg_replace_callback('/\{([^}]+)\}/', function($match){
    return $a[array_rand($a = explode('|', $match[1]))];
}, $str);

echo $str;

Sandbox

尽管我喜欢看海报的更多工作,但这很有趣,所以我说了什么。

Preg replace回调为每个匹配运行一个用户定义的函数。正则表达式是非常困难的。

  • \{从字面上匹配{,必须将其转义
  • ([^}]+)捕获一次或多次}以外的任何内容,字符集不需要转义
  • \}从字面上匹配},必须将其转义

然后回调将获得如下信息:

[
   0 => '{Hey|Hi|Heyy|Hii}'
   1 => 'Hey|Hi|Heyy|Hii'
]

因此,我们可以使用|将其分解为一个数组(分配给$a):

 [0=>'Hey',1=>'Hi',2=>'Heyy',3=>'Hii']

然后array_rand将从上述数组中返回一个随机密钥,因此我们只需将其放在$a[$key]部分中并返回替换项即可。

享受!