Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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 正则表达式不返回propper匹配项_Php_Regex_String - Fatal编程技术网

Php 正则表达式不返回propper匹配项

Php 正则表达式不返回propper匹配项,php,regex,string,Php,Regex,String,我目前在PHP服务器上的正则表达式遇到一些问题 这是我目前常用的表达方式: /\{content="(?:([^"\|]*)\|?)+"\}/ 我希望它能匹配: {content="default|test|content|text"} 然后在匹配项中返回: default test content text 但当我当前执行它时,我会在我的比赛中得到: array ( 0 => '{content="default|test|content|text"}', 1 =>

我目前在PHP服务器上的正则表达式遇到一些问题

这是我目前常用的表达方式:

/\{content="(?:([^"\|]*)\|?)+"\}/
我希望它能匹配:

{content="default|test|content|text"}
然后在匹配项中返回:

default
test
content
text
但当我当前执行它时,我会在我的比赛中得到:

array (
  0 => '{content="default|test|content|text"}',
  1 => '',
)
你们有谁对我做错了什么有意见吗

致以亲切的问候


Youri Arktesteijn

我不知道使用一行正则表达式怎么可能。无论如何,请尝试以下代码

<?php
if (preg_match('/\{content="(?:([^\"]+))"\}/', $sContent, $matches) > 0) {
    $result = explode('|', $matches[1]);
} else {
    $result = array();
}

echo '<pre>' . print_r($result, true) . '</pre>';
?>

我不知道使用一行正则表达式怎么可能。无论如何,请尝试以下代码

<?php
if (preg_match('/\{content="(?:([^\"]+))"\}/', $sContent, $matches) > 0) {
    $result = explode('|', $matches[1]);
} else {
    $result = array();
}

echo '<pre>' . print_r($result, true) . '</pre>';
?>
您可以使用正面lookaheads和正面lookbehinds。
三个阶段:

  • 我们匹配开始的报价,但在输出中没有捕捉到它。然后我们匹配任何不是管道的东西。然后我们匹配一根管子,但没有接住它
  • 管道之间的非管道
  • 管道和引号之间的非管道和非引号
  • 这是密码

    Array
    (
    [0] => default
    [1] => test
    [2] => content
    [3] => text
    )
    
    一旦逻辑正常工作,就可以将前视字符和后视字符配对以缩短匹配字符串

    Array
    (
    [0] => default
    [1] => test
    [2] => content
    [3] => text
    )
    
    您可以使用正面lookaheads和正面lookbehinds。 三个阶段:

  • 我们匹配开始的报价,但在输出中没有捕捉到它。然后我们匹配任何不是管道的东西。然后我们匹配一根管子,但没有接住它
  • 管道之间的非管道
  • 管道和引号之间的非管道和非引号
  • 这是密码

    Array
    (
    [0] => default
    [1] => test
    [2] => content
    [3] => text
    )
    
    一旦逻辑正常工作,就可以将前视字符和后视字符配对以缩短匹配字符串

    Array
    (
    [0] => default
    [1] => test
    [2] => content
    [3] => text
    )
    

    请定义“我当前执行”。你是如何执行的,你使用的是哪个函数请定义“我当前执行”。你是如何执行的,你使用的是哪个函数等等。你是如何执行的,你使用的是哪个函数,等等,尽管我很讨厌它,但我认为这是唯一的解决办法。