我需要在除/
和-
以外的任何非字母数字字符上分割字符串。例如,在preg_split()
中:
/[^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()
,但我开放更好,更全面的方式比这。
你不能只是把东西塞进字符类。所有东西都将被视为单个字符。您想要的是一个负向后看,以确保在匹配之前没有https?://
(仅由非空白字符分隔)。但是只有。net支持变长后看。你可以反转输入、模式和结果来解决这个问题,但这有点过了头。从分割到匹配:
preg_match_all('~https?://S*|[a-zA-Z0-9/-]+~', $input, $matches);
现在$matches[0]
将包含您想要的数组。
工作演示。
请注意,您可以将分隔符更改为几乎任何内容。这很有用,如果你有很多正斜杠,所以你不必转义它们。如果连字符是字符类中的最后一个字符,也不需要转义,但在这种情况下,是否转义是个人喜好的问题。