救命!应该使用带有爆炸声明的str_replace和正则表达式吗?

时间:2011-04-02 15:19:42

标签: php regex string explode

我有两个字符串

$string1 = "� 2~07225~ 3~0430~ 4~01254~ 5~0853~* 7~08064~ 8~0853~ 10~0776~."

$string2 = "from the start Lisa drafted the paper for the project." 

我需要一个字符串(echo)输出,该输出应该如下(数字上标):

“从一开始(07225)Lisa(0430)起草(01254)*(0853)论文(08064)为*(0853)项目(0776)。”

我应该使用带有str_replace语句的explode和正则表达式吗?

* 表示为形容词中的隐形填充,例如“蓝色”(853)纸和“科学”(853)项目。

任何人都可以接受挑战?

我花了无数个小时试图解决这个问题。

请记住php从0开始算......

JC

1 个答案:

答案 0 :(得分:3)

听起来像是家庭作业,所以我会给你关键的指针,而不是代码。

分词是最简单的,确实使用爆炸:

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

正则表达式也很简单:

preg_match_all('#(\d+)~(\d+)~([*]?)#', $string1, $matches,
     PREG_SET_ORDER);

你基本上必须超过$ match。您将在[1]中找到单词index,在[2]中找到填充号:

foreach ($matches as $row) {

    list( , $word_index, $fill_number, $asteriskthingy) = $row;

要汇编输出字符串,您需要:

  • 从$ last_index获取$ words到当前的$ word_index。在这里使用array_slice
  • 附加填充号。
  • 或者做*应该表达的意思。你没有解释这种变化背后的逻辑,所以;不知道。