相关疑难解决方法(0)

正则表达式验证JSON

我正在寻找一个允许我验证json的正则表达式.

我是Regex的新手,我知道用Regex解析很糟糕,但可以用来验证吗?

regex json

81
推荐指数
5
解决办法
10万
查看次数

按分隔符拆分字符串,但如果它已转义则不会

如何通过分隔符拆分字符串,但如果它被转义则不能?例如,我有一个字符串:

1|2\|2|3\\|4\\\|4
Run Code Online (Sandbox Code Playgroud)

分隔符是|和转义分隔符\|.此外,我想忽略逃脱反斜杠,因此\\||仍然是一个分隔符.

所以使用上面的字符串,结果应该是:

[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
Run Code Online (Sandbox Code Playgroud)

php regex preg-split

52
推荐指数
2
解决办法
4605
查看次数

折叠并捕获单个正则表达式中的重复模式

我不断遇到需要从字符串中捕获大量令牌的情况,经过无数次的尝试后,我找不到简化过程的方法.

所以我们说文本是:

启动:测试 - 测试 - LOREM-存有-SIR-doloret - 等 - 等 - 的东西:结束

这个例子里面有8个项目,但是说它可能有3到10个项目.

我理想上喜欢这样的东西:
start:(?:(\w+)-?){3,10}:end漂亮而干净但是它只能抓住最后一场比赛.看这里

我通常在简单的情况下使用这样的东西:

start:(\w+)-(\w+)-(\w+)-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?:end
Run Code Online (Sandbox Code Playgroud)

由于最大10限制,3组强制要求和另外7组可选,但这看起来并不"好",如果最大限制为100且匹配更复杂,编写和跟踪将是一件痛苦的事.演示

到目前为止我能做的最好:

start:(\w+)-((?1))-((?1))-?((?1))?-?((?1))?-?((?1))?-?((?1))?-?((?1))?:end
Run Code Online (Sandbox Code Playgroud)

特别是如果比赛很复杂但仍然很长.演示

有人设法让它作为一个没有编程的1正则表达式解决方案工作

我最感兴趣的是如何在PCRE中完成,但其他口味也可以.

更新:

目的是match 0通过RegEx单独验证匹配并捕获单个令牌,而不受任何OS /软件/编程语言限制

更新2(赏金):

在@nhahtdh的帮助下,我使用以下方法访问下面的RegExp \G:

(?:start:(?=(?:[\w]+(?:-|(?=:end))){3,10}:end)|(?!^)\G-)([\w]+)
Run Code Online (Sandbox Code Playgroud)

演示甚至更短,但无需重复代码即可进行描述

我也对ECMA的味道感兴趣,因为它不支持\G想知道是否有另一种方式,特别是不使用/g修饰符.

regex language-agnostic

32
推荐指数
2
解决办法
2万
查看次数

与preg_match_all()重复匹配

我试图让所有子串与乘数匹配:

$list = '1,2,3,4';
preg_match_all('|\d+(,\d+)*|', $list, $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

此示例按预期返回上次匹配[1]:

Array
(
    [0] => Array
        (
            [0] => 1,2,3,4
        )

    [1] => Array
        (
            [0] => ,4
        )

)
Run Code Online (Sandbox Code Playgroud)

但是,我希望得到所有匹配的字符串(,\d+),以获得类似的东西:

Array
(
    [0] => ,2
    [1] => ,3
    [2] => ,4
)
Run Code Online (Sandbox Code Playgroud)

有没有办法用一个功能,如preg_match_all()

php regex preg-match-all preg-match

10
推荐指数
2
解决办法
3016
查看次数

你能在JavaScript中检索多个正则表达式匹配吗?

我在JavaScript中有以下正则表达式,它匹配"12:23:34:45"和"12:23"之类的字符串

/^([0-9]{1,2}\:){0,3}([0-9]{0,2})?$/
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我查看匹配数据时,只返回3个匹配项.例如,对于12:23:34:45,返回的比赛是:

12:23:34:45
34:
45
Run Code Online (Sandbox Code Playgroud)

即第一个捕获组仅报告其最后一个值.我希望比赛是:

12:23:34:45
12:
23:
34:
45
Run Code Online (Sandbox Code Playgroud)

这可能吗?

javascript regex

8
推荐指数
1
解决办法
1382
查看次数

在将用户输入的PHP代码传递给eval()之前验证它

在将字符串传递给eval()之前,我想确保语法正确并允许:

  1. 两个函数:a()和b()
  2. 四个运营商:/* - +
  3. 支架:()
  4. 数字:1.2,-1,1

我怎么能这样做,也许它与PHP Tokenizer有关?

我实际上是在尝试创建一个简单的公式解释器,所以a()和b()将被ln()和exp()替换.我不想从头开始编写tokenizer和parser.

php

7
推荐指数
1
解决办法
1655
查看次数

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

我正在试验PHP的PCRE中的命名子模式/'子程序'正则表达式功能,我希望有人可以解释以下奇怪的输出:

$re = "/
(?(DEFINE)
    (?<a> a )
)

^(?&a)$

/x";

var_dump(preg_match($re, 'a', $match)); // (int) 1 as expected
var_dump($match); // Array( [0] => 'a' ) <-- Why?
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么命名组"a"不在结果中(内容为"a").更改preg_matchpreg_match_all在匹配数据中放置"a"和"1",但两者仅包含空字符串.

我非常喜欢用这种方式编写正则表达式的想法,因为你可以使它们非常强大,同时保持它们非常易于维护(请参阅这个答案以获得一个很好的例子),但是如果子模式在匹配数据中不可用那么它不是真的很有用.

我在这里遗漏了什么,或者我应该哀悼可能发生的事情并继续前进?

php regex pcre

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

在嵌套数组中查找内部数组

我在PHP中有一个嵌套数组:

array (
'0' => "+5x",
'1' => array (
       '0' => "+",
       '1' => "(",
       '2' => "+3",
       '3' => array (
              '0' => "+",
              '1' => "(",
              '2' => array ( // I want to find this one.
                  '0' => "+",
                  '1' => "(",
                  '2' => "+5",
                  '3' => "-3",
                  '4' => ")"
                  ),
              '3' => "-3",
              '4' => ")"
              ),
       '4' => ")"
       )
);       
Run Code Online (Sandbox Code Playgroud)

我需要在这里处理最里面的数组,一个带有注释的数组:"我想找到这个." 有功能吗?

我考虑过做(写作一个想法,而不是正确的PHP):

foreach ($array as $id => $value) {
    if ($value …
Run Code Online (Sandbox Code Playgroud)

php arrays nested

4
推荐指数
1
解决办法
2897
查看次数