在非字母数字字符以及数字和非数字之间的位置拆分字符串
我试图通过非字母数字分隔字符以及数字和非数字的交替来分割字符串。最终结果应该是由字母字符串和数字字符串组成的平面数组。
我正在使用 PHP,并且想使用 REGEX。
示例:
ES-3810/24MX
应变为['ES', '3810', '24', 'MX']
CISCO1538M
应变为['CISCO' , '1538', 'M']
输入文件序列可以是数字或字母。
分隔符可以是非 ALPHA 和非 DIGIT 字符,也可以是 DIGIT 序列到 APLHA 序列之间的更改,反之亦然。
I'm trying to split a string by non-alphanumeric delimiting characters AND between alternations of digits and non-digits. The end result should be a flat array of consisting of alphabetic strings and numeric strings.
I'm working in PHP, and would like to use REGEX.
Examples:
ES-3810/24MX
should become['ES', '3810', '24', 'MX']
CISCO1538M
should become['CISCO' , '1538', 'M']
The input file sequence can be indifferently DIGITS or ALPHA.
The separators can be non-ALPHA and non-DIGIT chars, as well as a change between a DIGIT sequence to an APLHA sequence, and vice versa.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
匹配所有出现的正则表达式的命令是
preg_match_all()
,它输出结果的多维数组。正则表达式非常简单...任何数字 ([0-9]
) 一次或多次 (+
) 或 (|
) 任何字母 ([Az]
) 一次或多次 (+
)。请注意大写A
和小写z
以包含所有大写和小写字母。为了方便起见,包含了 textarea 和 php 标签,因此您可以放入 php 文件并查看结果。
在文本区域中输出:
The command to match all occurrances of a regex is
preg_match_all()
which outputs a multidimensional array of results. The regex is very simple... any digit ([0-9]
) one or more times (+
) or (|
) any letter ([A-z]
) one or more times (+
). Note the capitalA
and lowercasez
to include all upper and lowercase letters.The textarea and php tags are inluded for convenience, so you can drop into your php file and see the results.
Which outputs in the textarea:
我想不出更“干净”的方式了。
I could not think on a more 'cleaner' way.
生成所需平面输出数组的最直接的
preg_
函数是preg_split()
。因为非字母数字字符序列两侧的字母数字字符的组合并不重要,所以您可以贪婪地拆分非字母数字子字符串,而无需“环顾四周”。
处理完初步障碍后,然后在数字和非数字之间或非数字和数字之间的零长度位置上进行分割。
代码:(演示)
preg_match_all()
不是一个愚蠢的技术,但它不返回数组,它返回匹配数并生成一个引用变量,其中包含需要访问第一个元素的二维数组。诚然,该模式更短且更容易遵循。 (演示)The most direct
preg_
function to produce the desired flat output array ispreg_split()
.Because it doesn't matter what combination of alphanumeric characters are on either side of a sequence of non-alphanumeric characters, you can greedily split on non-alphanumeric substrings without "looking around".
After that preliminary obstacle is dealt with, then split on the zero-length positions between a digit and a non-digit OR between a non-digit and a digit.
Code: (Demo)
preg_match_all()
isn't a silly technique, but it doesn't return the array, it returns the number of matches and generates a reference variable containing a two dimensional array of which the first element needs to be accessed. Admittedly, the pattern is shorter and easier to follow. (Demo)