我有一个字符串:
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是上面提到的字符串值。
请帮帮我。
答案 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开头,后跟一个或多个0
和9
之间的数字字符。非贪婪?
。\.
- 时段.
跟随比赛的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