给出以下字符串:
lower=Value - 1.96*Std. Error
我需要找到能给出以下结果的正则表达式:
let str = '5+81+3+16+42';
const array = str.split('+');
const splited = []
array.reduce((a, b) => {
splited.push(a+'+'+b)
return b
})
console.log(splited);
print_r($ result);
{start} SubPattern1 {end}
....
{start} SubPattern2 {end}
....
{start} {start}SubPattern3{end} {end}
谢谢!
修改
出于视觉目的,我编写了多行字符串。但是,即使所有文本都在单个行字符串中,我也需要该表达式起作用。例如:
{start} SubPattern1 {end} {start} SubPattern2 {end} {start} {start} SubPattern3 {end} {end}
答案 0 :(得分:0)
您可以使用此
^{start}(.*){end}$
^
-字符串的开头。{start}
-匹配{start}
。(.*)
-匹配除换行以外的所有内容。 (捕获组)。{end}
-匹配{end}
。$
-字符串的结尾。答案 1 :(得分:0)
您可以匹配{start}和{end}并使用捕获组并对模式使用递归:
{start}((?:(?:(?!{(?:start|end)}).)+|(?R))*){end}
例如:
$string = <<<DATA
{start} SubPattern1 {end}
{start} SubPattern2 {end}
{start} {start}SubPattern3{end} {end}
DATA;
preg_match_all('/{start}((?:(?:(?!{(?:start|end)}).)+|(?R))*){end}/', $string, $result);
print_r($result);
说明
{start}
字面上匹配(
开始捕获组
(?:
非捕获组
(?:
非捕获组
(?!{(?:start|end)}).
,断言右边的否定超前不是{start}或{end}。在这种情况下,请匹配任何字符。)+|(?R)
关闭非捕获组并重复1次以上,或者|
重复整个模式)*
关闭非捕获组并重复0次以上)
关闭捕获组{end}
-按字面意思匹配结果:
Array
(
[0] => Array
(
[0] => {start} SubPattern1 {end}
[1] => {start} SubPattern2 {end}
[2] => {start} {start}SubPattern3{end} {end}
)
[1] => Array
(
[0] => SubPattern1
[1] => SubPattern2
[2] => {start}SubPattern3{end}
)
)