我需要拆分除/
和-
之外的任何非字母数字字符的字符串。例如,在preg_split()
:正则表达式拆分除URL中的字符串
/[^a-zA-Z0-9\/\-]/
这个伟大的工程,但现在我希望在字符的URL被发现在所有这些点字符串分割除了(即我想保持URL一起) 。我认为URL是一个以http://
或https://
开头的以空格分隔的子字符串。换句话说:
My string. https://my-url.com?q=3 More strings.
应该得到分成:
[0] My
[1] string
[2] https://my-url.com?q=3
[3] More
[4] strings
我已经试过像/[^a-zA-Z0-9\/\-(https?\:\/\/.\s)]+/
有些幼稚的方法,但是,不幸的是,我不知道如何做到这一点字符类之外,这显然没有给我我想要的结果。
我现在使用PHP,我希望只使用preg_split()
,但我打开更好,更全面的方式比这个。
哇!经过5年以上的PHP工作,我学到了一个崇高的真理:'preg_split()'中断了正则表达式匹配的字符串,'preg_match_all()'中断了正则表达式不匹配的字符串。这是我正在寻找的功能...而且更简单。谢谢。 – Matt
@Matt这是一个有趣的方式来看待它。但是当你考虑捕获如何在这两种情况下工作时,它确实很有趣:在preg_match_all中捕获给出你返回的其他字符串的子串(忽略周边),并且preg_split给出了子串的内容, **返回(如果您使用'PREG_SPLOT_DELIM_CAPTURE');) –