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. к о1.
Я пробовал в php, как:

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

где $ contents2 — указанное выше строковое значение.

Пожалуйста, помогите мне.

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
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, за которой следуют 1 или более символов, которые являются цифрами между 0 а также 9, Не жадный с ?,
  • \. — Период . следует за Q## часть матча
  • \s — пробел следует за периодом . часть матча
  • ( — начать выбор группы
  • [^\?]+ — сопоставить один или несколько символов, которые не ? характер ( \ избегает регулярного выражения)
  • \? — включите вопросительный знак в конце матча
  • ) — конец выбора группы

Бонус: в случае, если вопрос не сформулирован с ? отметьте в самом конце (например, «Что такое 2 + 2? Выберите правильный ответ»), чтобы вместо этого соответствовать o1 После вопроса вы можете использовать:

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

Эта стратегия соответствует любой персонаж после Q##. не жадным образом до o1 часть была найдена. Он намеренно исключен из группы, поэтому совпадения не содержат o1,

0

По вопросам рекламы [email protected]