我正在编写一个解析器,我需要使用php
提取双管道之间的单词例如,我想从下面的字符串中提取'ipsum'
Lorem ||ipsum|| blah
如果双管之间有多个单词,也应该提取它们
澄清
当我说多个单词时,我不是这个意思:||单词另一个单词||
我的意思是
||Word1|| blah blah (newline)
blah ||Word2||
澄清第2部分
the ||quick|| brown fox ||jumps|| over the lazy ||dog||
应该提取的内容应该是“快速”,“跳跃”和“狗”等字样
很抱歉这个混乱...下面可能有一些正确的答案,我明天在工作时会确认一个:)
答案 0 :(得分:3)
一个简单的
$array = explode('||', $string);
之后,您可能希望使用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。一般来说,它更容易阅读,更容易将以后删除。所以你有一个简单的正则表达式和一个简单的修剪。
希望它有所帮助,