Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式(包括特定于括号的和任何字母/数字/符号,具体取决于字符串中的位置)_Php_Regex - Fatal编程技术网

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);