我有很多文字,类似于以下段落,我想将其分成没有标点符号的文字('
,"
,,
,{{ 1}},.
等)..除了少数例外。
最初被认为是印度南部喀拉拉邦Chalakudy河系统的特有种,但现在被认为在周边排水系统中有更广泛的分布,包括Periyar,Manimala和Pamba河,尽管Manimala数据可能有问题,因为它似乎是P. denisonii的类型区域。
在Achankovil河流域,它与P. denisonii同时发生,有时在合成上发生。
在过去的15年左右,野生种群可能已经减少了多达50%的水族馆贸易收集,尽管栖息地也受到来自农业和国内污染源的污染,以及涉及爆炸物的破坏性捕捞方法的影响。或有机毒素。
该文提到newline
这是一种鱼类。它是P. denisonii
的缩写。我想这个参考是一个词。
因此,例如,这是我想看到的那种数组:
Genus species
区分这些物种参考的唯一因素,例如Array
(
...
[44] given
[45] it
[46] seems
[47] to
[48] be
[49] the
[50] type
[51] locality
[52] of
[53] P. denisonii
[54] In
[55] the
...
)
来自P. denisonii
这样的新句子:
end. New
) 我可以使用'
使用什么正则表达式给我这样的数组?我尝试过一个简单的preg_split
,但它根本不能完成任务。
提前致谢,
答案 0 :(得分:2)
更改您的方法:为什么不使用preg_match_all
代替preg_split
?
您不会使用拆分分隔符拆分文本,而是匹配不包含分隔符的所有字符串。
将它与正则表达式/([\S]+)|(P. denisonii)/
一起使用,以匹配所有非空格序列和序列“P. denisonii”
要排除逗号,引号和句号以及其他字符,只需将\ S替换为负正则表达式字符列表[^...]
:
/([^\s,\.\"]+)|(P. denisonii)/
匹配所有不包含空格(\s
),逗号,引号和点(\.
)的序列
编辑:以匹配通用属名称(注意:我已更改您的文本以更好地测试代码,包括引用和虚假属名称)
$text = "Initially considered \"endemic\" to the Chalakudy River system in Kerala state, southern India, but now recognised to have a wider distribution in surrounding drainages including the Periyar, Manimala, and Pamba river though the Manimala data may be questionable given it seems to be the type locality of P. denisonii.
This is a bogus genus name, A. testii.
In the Achankovil River basin it occurs sympatrically, and sometimes syntopically, with P. denisonii.
Wild stocks may have dwindled by as much as 50% in the last 15 years or so with collection for the aquarium trade largely held responsible although habitats are also being degraded by pollution from agricultural and domestic sources, plus destructive fishing methods involving explosives or organic toxins.";
preg_match_all("/([A-Z]\. [a-z]+)|([^\s,\.\"]+)/", $text, $matches, PREG_PATTERN_ORDER);
echo "<pre>";
print_r($matches);
注意:您应该选择的数组是$matches[0]
,而不是$matches