我正在尝试通过垂直条来爆炸一根弦。这是最简单的部分。但是,我不希望分割影响括号内的子字符串。这意味着我需要一个字符串,例如:
Hello (sir|maam).|Hi there!
爆炸成:
Array
(
[0] => Hello (sir|maam).
[1] => Hi there!
)
通过使用普通的爆炸函数,我不相信有办法告诉它忽略括号包围的条。不过,我有一些想法。
我知道可以通过正常分解字符串,然后循环遍历数组并合并包含的字符串之间的所有内容来做到这一点(
到包含的结束字符串)
。然而,我有一种感觉,应该有一种更优雅的方式来实现这一点。
我对吗?考虑到这些限制,是否有一种代码密集程度较低的方法将字符串拆分为数组?
如果你能保证括号是平衡的并且永远不会嵌套(也就是说,如果永远不会出现'Oops(!'
or a '(nested stuff (like this)|oops)'
),并且永远不会有||
在您希望将其匹配为空字符串的括号之外,那么这应该会有所帮助:
preg_match_all('/(?:[^(|]|\([^)]*\))+/', $your_string, $matches);
$parts = $matches[0];
它将匹配 [任一(不是一个字符|
or (
), or a (
and )
包含任何不是)
(包括|
)],尽可能多次(但至少一次)。简短版本:它会让|
括号之间是匹配的部分,而不是分隔符。
另一种可能性稍微不那么神秘:
$parts = preg_split('/\|(?![^(]*\))/', $your_string);
使用前瞻断言来取消任何|
接下来是)
如果没有(
之间。对于括号仍然有点不宽容,但它会匹配两个之间的空字符串|
s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)