相关疑难解决方法(0)

如何使用preg_match_all()获取子组匹配的所有捕获?

更新/注意事项:

我认为我可能正在寻找的是用PHP 获取组捕获.

引用:使用命名模式子例程的PCRE正则表达式.

(仔细读:)


我有一个包含可变数量的段(简化)的字符串:

$subject = 'AA BB DD '; // could be 'AA BB DD CC EE ' as well
Run Code Online (Sandbox Code Playgroud)

我想现在匹配段并通过匹配数组返回它们:

$pattern = '/^(([a-z]+) )+$/i';
$result = preg_match_all($pattern, $subject, $matches);
Run Code Online (Sandbox Code Playgroud)

这只会返回捕获组2 的最后一个匹配:DD.

有没有办法,我可以检索所有的子模式捕获(的方式AA,BB,DD)与一个正则表达式执行?不preg_match_all适合这个吗?

这个问题是一个概括.

无论是$subject$pattern简化.自然地与这样的通用列表AA,BB..是更容易与其它功能(例如,以提取explode),或与的的变化$pattern.

但我特别询问如何使用preg_...-family函数返回所有子组匹配.

对于现实生活中的情况,假设您有多个(嵌套)级别的子模式匹配变量.

这是用于描述一些背景的伪代码的示例.想象一下:

令牌的常规定义:

   CHARS := [a-z]+
   PUNCT := …
Run Code Online (Sandbox Code Playgroud)

php regex grammar preg-match-all

19
推荐指数
1
解决办法
1万
查看次数

在php中安全使用eval函数:修改用户输入以避免安全问题

我正在接管一些在 php中使用eval()函数的网页游戏代码。我知道这可能是一个严重的安全问题,因此在我决定是否取消该部分代码之前,我需要一些帮助来审查检查其参数的代码。目前我已经从游戏中删除了这部分代码,直到我确定它是安全的,但功能的损失并不理想。我宁愿对此进行安全证明,也不愿重新设计整个段以避免使用 eval(),假设这样的事情是可能的。据称可以防止恶意代码注入的相关代码片段如下。$value 是一个用户输入的字符串,我们知道它不包含“;”。

1 $value = eregi_replace("[ \t\r]","",$value);
2 $value = addslashes($value);
3 $value = ereg_replace("[A-z0-9_][\(]","-",$value);
4 $value = ereg_replace("[\$]","-",$value);
5 @eval("\$val = $value;");
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的理解:

1) 从 $value 中删除所有空格

2)转义数据库调用需要它的字符(我不清楚为什么需要它)

3) 查找字母数字字符后紧跟 \ 或 ( 并用 - 替换它们的组合。大概这是为了删除字符串中与函数调用类似的任何内容,尽管我不清楚为什么它还删除前面的字符,这就是为什么在第 2 行明确添加它们之后,它也会删除 \。

4) 用 - 替换 $ 的所有实例,以避免任何类似于对字符串中 php 变量的引用。

那么:这里有没有留下任何漏洞?我是否误解了上面的任何正则表达式?最后,有没有办法在不排除 ( 字符?要输入的字符串是理想的数学公式的情况下对此进行安全证明,并且允许 ( 将允许操作操作顺序,目前这是不可能的。

php security eval

5
推荐指数
1
解决办法
4509
查看次数

用regexp模拟php数组语言构造或解析?

从外部来源我得到的字符串就像

array(1,2,3)
Run Code Online (Sandbox Code Playgroud)

但也有更大的阵列

array("a", "b", "c", array("1", "2", array("A", "B")), array("3", "4"), "d")
Run Code Online (Sandbox Code Playgroud)

我需要它们是php中的实际数组.我知道我可以使用eval,但由于它是不受信任的来源,我宁愿不这样做.我也无法控制外部资源.

我应该为此使用一些正则表达式(如果是这样,是什么)还是有其他方法?

php regex parsing

4
推荐指数
2
解决办法
1151
查看次数

标签 统计

php ×3

regex ×2

eval ×1

grammar ×1

parsing ×1

preg-match-all ×1

security ×1