2

我有以下操作,只要遇到字母就会拆分字符串:

$splitOriginal = preg_split("/[a-zA-Z]/", implode('', array_slice($array, $key)), 2);

我想以这样一种方式扩展它,只要遇到的变量不是数字、括号、加号、连字符、换行符或制表符,它就会拆分字符串。

我写了一个可以匹配上面的正则表达式:

preg_match('/^(?=.*[0-9])[- +()0-9\r\n\t]+$/', $value)

但我需要否定它,以便在被比较的值不是它时匹配。非常感谢我能得到的任何及时帮助。

谢谢你。

4

1 回答 1

1

[a-zA-Z]模式匹配任何 ASCII 字母。任何字符“不是数字、括号、加号、连字符、换行符或制表符”也可以是字母,所以你应该关注后一个要求,你以前的模式不再相关。

你应该继续使用preg_split

$splitOriginal = preg_split('/[^\d()+\n\t-]/', implode('', array_slice($array, $key)), 2);

[^\d()+\n\t-]模式与您制定的完全匹配。注意连字符,当它位于字符类的末尾(或开头)时,它可以不转义。

于 2021-11-24T12:59:00.203 回答