У меня есть строка вроде:
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 — указанное выше строковое значение.
Пожалуйста, помогите мне.
Попробуйте это .. определенно это поможет вам:
$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
Вот ваше регулярное выражение:
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
,