0

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

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

Lorem ||ipsum|| blah

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

澄清

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

我的意思是这个

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

说明第 2 部分

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

应该提取的应该是'quick','jumps'和'dog'这三个词

很抱歉造成混乱......下面可能有一些正确的答案,我会在明天上班确认后选择一个:)

4

4 回答 4

3

简单的怎么办

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

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

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

于 2012-08-20T17:54:55.130 回答
2

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

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

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

于 2012-08-20T17:55:49.797 回答
1

尝试这个:

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

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

if(preg_match_all('/\|\|(.*?)\|\|/', $str, $matches) !== FALSE){
    print_r($matches[1]);
}
于 2012-08-20T17:56:26.077 回答
1

我想我知道你在找什么:

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

这应该满足您的示例:

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

挑选出 Word1 和 Word2。

你需要剥掉||两边。

||除了 KISS,还有一种方法可以使用正则表达式来剥离。通常,以后将这些内容剥离出来更容易阅读和更容易。所以你有一个简单的正则表达式和一个简单的修剪。

希望能帮助到你,

于 2012-08-20T19:55:21.050 回答