在php中的页面中获取两个单词之间的字符串

时间:2014-12-09 14:08:19

标签: php substring

我有一个字符串:

Q1. What is the value of 2+3? o1. 5 o2. 6 o3. None o4. All the Above Category : Maths Subcategory : Algebra Attribute : Skill Test Correct Option : 1 Q2. What is the value of 10+30? o1. 40 o2. 60 o3. None o4. All the Above Category : Maths Subcategory : Algebra Attribute : Skill Test Correct Option : 1 

现在我想创建一个包含两个元素的数组:

What is the value of 2+3?

What is the value of 10+30?

这基本上意味着Q1.to o1之间的文本。和Q2。到o1。 我在php中尝试过:

preg_match('/Q1(.*?)o1/', $contents2,$matches);
print_r($matches);

其中$ contents2是上面提到的字符串值。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

这是你的正则表达式:

preg_match_all('/Q[0-9]+?\.\s([^\?]+\?)/', $contents2, $matches);

您的字符串位于$matches[1]

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(29) "Q1. What is the value of 2+3?"
    [1]=>
    string(31) "Q2. What is the value of 10+30?"
  }
  [1]=>
  array(2) {
    [0]=>
    string(25) "What is the value of 2+3?"
    [1]=>
    string(27) "What is the value of 10+30?"
  }
}

假设:

  • 问题始终以Q##.开头,其中##是数字的任意组合。
  • 问题始终以?标记结束。

正则表达式细分:

  • Q[0-9]+? - 匹配以字母Q开头,后跟一个或多个09之间的数字字符。非贪婪?
  • \. - 时段.跟随比赛的Q##部分
  • \s - 匹配期间.部分后面的空格
  • ( - 开始群组选择
  • [^\?]+ - 匹配一个或多个一个?字符的字符(\转义正则表达式字符)
  • \? - 在比赛结尾处加上问号
  • ) - 小组选择结束

奖励:如果问题没有在最后加上?标记(例如"什么是2 + 2?选择正确的答案。"),而是匹配对于问题后面的一致o1,您可以使用:

preg_match_all('/Q[0-9]+?\.\s(.+?)o1/', $contents2, $matches);

此策略改为在Q##.之后以非贪婪的方式匹配任何字符,直到找到o1部分。故意将其排除在群组之外,因此匹配项不会包含o1

答案 1 :(得分:0)

试试这个......绝对会帮助你:

$string = "Q1. What is the value of 2+3? o1. 5 o2. 6 o3. None o4. All the Above Category : Maths Subcategory : Algebra Attribute : Skill Test Correct Option : 1 Q2. What is the value of 10+30? o1. 40 o2. 60 o3. None o4. All the Above Category : Maths Subcategory : Algebra Attribute : Skill Test Correct Option : 1";

$temp_array = NULL;
$final_array = NULL;

function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

//determine number of question mark
$number_of_question_mark = substr_count($string , "?");

for($i=0;$i<$number_of_question_mark;$i++){
       $temp_array[$i] = get_string_between($string, "What is the value of", "?");

       //replace the search string
       preg_replace('/What is the value of/', '', $string, 1);
       preg_replace('/?/', '', $string, 1);

}


foreach($temp_array as $key=>$value){
    $final_array[$key] = "What is the value of ".$value."?";
}

print_r($final_array);// this is the result