繁体   English   中英

如何在PHP中使用正则表达式提取管道之间的单词?

[英]How do I extract a word between pipes using regex in PHP?

我正在编写一个解析器,我需要使用php提取双管道之间的单词

例如,我想从下面的字符串中提取“ ipsum”

Lorem ||ipsum|| blah

如果双管道之间有多个单词,则也应提取它们

澄清度

当我说多个单词时,我不是这个意思:||另一个单词||

我的意思是

||Word1|| blah blah (newline)
blah ||Word2||

澄清第2部分

the ||quick|| brown fox ||jumps|| over the lazy ||dog|| 

应该提取的单词应该是“快速”,“跳跃”和“狗”

抱歉给您带来的困惑...下面可能有一些正确的答案,一旦我明天工作确认,我就选一个。

那么简单

$array = explode('||', $string);

之后,您可能想使用trim()修剪数组值。

另请参见http://www.php.net/explodehttp://www.php.net/trim

这是一个正则表达式解决方案: http : //regex101.com/r/vE9pY9

 /\Q||\E[^|]+\Q||\E/

但是,这不会接受管道成为该词的一部分。 如果这是必需的,则必须重新制作正则表达式。

尝试这个:

if(preg_match('/\|\|(.*)\|\|/', $str, $matches) === 1){
    echo $matches[1];
}

或者如果有多个|| , 尝试这个:

if(preg_match_all('/\|\|(.*?)\|\|/', $str, $matches) !== FALSE){
    print_r($matches[1]);
}

我想我知道你在找什么:

\|\|[a-zA-Z0-9]+\|\|

这应该满足您的示例:

||Word1|| blah blah (newline)
blah ||Word2||

挑选Word1和Word2。

您将需要去除|| 在任一侧。

有一种使用正则表达式来去除|| 也一样,但吻。 通常更容易阅读,以后再将其删除。 因此,您有一个带有简单修饰的简单正则表达式。

希望能帮助到你,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM