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

时间:2012-08-20 17:52:23

标签: php regex

我正在编写一个解析器,我需要使用php

提取双管道之间的单词

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

Lorem ||ipsum|| blah

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

澄清

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

我的意思是

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

澄清第2部分

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

应该提取的内容应该是“快速”,“跳跃”和“狗”等字样

很抱歉这个混乱...下面可能有一些正确的答案,我明天在工作时会确认一个:)

4 个答案:

答案 0 :(得分:3)

一个简单的

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

试试这个:

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

如果有多个||,请尝试以下方法:

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

答案 3 :(得分:1)

我想我知道你在寻找什么:

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

这应该满足你的例子:

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

选择Word1和Word2。

您需要剥离任意一方的||

有一种方法可以使用正则表达式去除||,但KISS。一般来说,它更容易阅读,更容易将以后删除。所以你有一个简单的正则表达式和一个简单的修剪。

希望它有所帮助,