我正在寻找一个允许我验证json的正则表达式.
我是Regex的新手,我知道用Regex解析很糟糕,但可以用来验证吗?
如何通过分隔符拆分字符串,但如果它被转义则不能?例如,我有一个字符串:
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) 我不断遇到需要从字符串中捕获大量令牌的情况,经过无数次的尝试后,我找不到简化过程的方法.
所以我们说文本是:
启动:测试 - 测试 - 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 /软件/编程语言限制
在@nhahtdh的帮助下,我使用以下方法访问下面的RegExp \G:
(?:start:(?=(?:[\w]+(?:-|(?=:end))){3,10}:end)|(?!^)\G-)([\w]+)
Run Code Online (Sandbox Code Playgroud)
演示甚至更短,但无需重复代码即可进行描述
我也对ECMA的味道感兴趣,因为它不支持\G想知道是否有另一种方式,特别是不使用/g修饰符.
我试图让所有子串与乘数匹配:
$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()?
我在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)
这可能吗?
在将字符串传递给eval()之前,我想确保语法正确并允许:
我怎么能这样做,也许它与PHP Tokenizer有关?
我实际上是在尝试创建一个简单的公式解释器,所以a()和b()将被ln()和exp()替换.我不想从头开始编写tokenizer和parser.
我正在试验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_match为preg_match_all在匹配数据中放置"a"和"1",但两者仅包含空字符串.
我非常喜欢用这种方式编写正则表达式的想法,因为你可以使它们非常强大,同时保持它们非常易于维护(请参阅这个答案以获得一个很好的例子),但是如果子模式在匹配数据中不可用那么它不是真的很有用.
我在这里遗漏了什么,或者我应该哀悼可能发生的事情并继续前进?
我在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)