PHP正则表达式(包括特定于括号的和任何字母/数字/符号,具体取决于字符串中的位置)
经过几个小时的实验,我已经变得相当困了。我正在寻找满足以下示例条件的正则表达式:PHP正则表达式(包括特定于括号的和任何字母/数字/符号,具体取决于字符串中的位置),php,regex,Php,Regex,经过几个小时的实验,我已经变得相当困了。我正在寻找满足以下示例条件的正则表达式: arrname = array('blackberry', 'apple', 'orange', 'mandarin'); arrname = array('****11111', '2%%%2', '3$$$$33', '444£££44'); 因此,基本上可以归结为以下模式: [arrname = array('] [any characters] [', '] [any characters] [', ']
arrname = array('blackberry', 'apple', 'orange', 'mandarin');
arrname = array('****11111', '2%%%2', '3$$$$33', '444£££44');
因此,基本上可以归结为以下模式:
[arrname = array('] [any characters] [', '] [any characters] [', '] [any characters] [', '] [any characters] [');]
其中任何字符都是字面上的任意(字母/数字/符号)-以任何顺序(但要求长度至少为1个字符)-因此需要使用preg_match()函数的正则表达式
我的问题是使正则表达式与上面提到的模式匹配(下面重复)
更新:
尝试实现preg_match()。有什么想法吗
首先(在表达式上使用双引号)
向我提供错误警告:preg_match():分隔符不能是字母数字或反斜杠
第二个(在表达式上使用单引号)
给我一个错误解析错误:语法错误,意外'('
根据您需要的具体程度,这是一个快速而清晰的方法:/'([^']+)“/
。它在单引号之间查找不是单引号的任何内容。根据您需要的具体程度,这是一种快速而简洁的方法:/”([^']+)“/
。这会在单引号之间查找不是单引号的任何内容。作为旁注,我将用两种不同的模式一步一步地描述正则表达式引擎的行为。请记住,这只是一个简短的表示,在现实生活中,字符串是逐字符处理的。其目的是查看正则表达式引擎路
字符串:arr=array('cherry','apple');
模式1:arr=array\(“(.+)”,“(.+)”\);
1 |
arr=array('cherry','apple');arr=array\('
2
arr=array('cherry','apple');arr=array\('.+)
由于在;
之后没有,
,因此正则表达式引擎必须逐字符回溯以找到匹配项。对于每个回溯位置,将测试模式的结尾。这就是我将每个回溯位置作为一个步骤计算的原因
3
arr=array('cherry','apple');arr=array\('.+)
4
arr=array('cherry','apple');arr=array\('.+)
5 |
arr=array('cherry','apple');arr=array\('.+)
找到”
,正则表达式引擎停止回溯并继续
6 |
arr=array('cherry','apple');arr=array\('(.+)',
在重新启动回溯以查找另一个“
7 |
arr=array('cherry','apple');arr=array\('.+)
…
13
arr=array('cherry','apple');arr=array\('.+)
找到另一个”
14 |
arr=array('cherry','apple');arr=array\('(.+)'
但后面不跟一个,
15 |
arr=array('cherry','apple');arr=array\('.+)
16 |
arr=array('cherry','apple');arr=array\('.+)
17 |
arr=array('cherry','apple');arr=array\('.+)
另一个,
后面跟着一个,'
18 |
arr=array('cherry','apple');arr=array\('(.+)','
19 |
arr=array('cherry','apple');arr=array\('(.+)','(.+)
在;
之后没有
20 |
arr=array('cherry','apple');arr=array\('(.+)','(.+)
21 |
arr=array('cherry','apple');arr=array\('(.+)','(.+)
22 |
arr=array('cherry','apple');arr=array\('(.+)','(.+)
将找到”
,然后是模式末尾的所有文本
23 |
arr=array('cherry','apple');arr=array\('(.+)','(.+)\);
模式2:arr=array\(“([^']+)”,“([^']+)”;
1 |
arr=array('cherry','apple');arr=array\('
2 |
arr=array('cherry','apple');arr=array\('([^']+)
现在,正则表达式引擎被迫在'
之前停止,因为字符类包含除'
之外的所有字符
3 |
arr=array('cherry','apple');arr=array\(“([^']+)”,”
4 |
arr=array('cherry','apple');arr=array\('([^']+),'([^']+)
出于同样的原因,在<代码>'
之前重新停止
5 |
arr=array('cherry','apple');arr=array\('([^']+),'([^']+)\);
作为旁白,我将用两种不同的模式一步一步地描述正则表达式引擎的行为。请记住,这只是一个简短的表示,在现实生活中,字符串是逐字符处理的。本文的目的是了解正则表达式引擎之路
字符串:arr=array('cherry','apple');
模式1:arr=array\(“(.+)”,“(.+)”\);
1 |
arr=array('cherry','apple');arr=array\('
2 |
arr=array('cherry','apple');arr=
[arrname = array('] [any characters] [', '] [any characters] [', '] [any characters] [', '] [any characters] [');]
$pattern = "arrname = array\('([^']+)', '([^']+)', '([^']+)', '([^']+)'\);";
preg_match($pattern, $data, $matches);
$pattern = 'arrname = array\('([^']+)', '([^']+)', '([^']+)', '([^']+)'\);';
preg_match($pattern, $data, $matches);