如何从字符串 PHP 中分离字母、数字、下划线和破折号
How to separate letters, numbers, undescore and dash from string PHP
我正在尝试像这样拆分字符串:
$string = letters1234_1-someMoreText;
输出应该是:
$string_split [letters1234, 1, someMoreText];
仅当字符串匹配所需的模式时。
if(preg_match('/^([A-Z]+)([0-9])([_])([0-9])([-])/', $string)) {
$string_split = preg_split('/^([A-Z]+[0-9]+)([_])([0-9])([-])([A-Z]+[0-9]+)/', $string);
}else{
$string_split = $string;
}
这似乎比我现在理解的要复杂得多,但到目前为止卡住了..
您实际上可以使用当前的正则表达式(并向其添加 .*
以匹配字符串尾部)和 preg_match
function 并使用 捕获组 来捕获您需要获得的部分。在您的情况下,只需检查 preg_match
并找到匹配项后,将找到的捕获分配给 $string_split
变量:
$string = "letters1234_1-someMoreText";
$string_split = $string;
if (preg_match('/^([A-Z]+[0-9]+)_([0-9])-(.*)/si', $string, $matches)) {
array_shift($matches);
$string_split = $matches;
}
print_r($string_split);
看到 PHP demo 产生
Array
(
[0] => letters1234
[1] => 1
[2] => someMoreText
)
图案详情
^
- 字符串开头
([A-Z]+[0-9]+)
- 捕获第 1 组:一个或多个字母后跟 1+ 个数字
_
- 下划线
([0-9])
- 捕获第 2 组:一个数字
-
- 一个连字符
(.*)
- 任何 0+ 个字符
is
修饰符使模式不区分大小写,.
可以匹配换行符。
我正在尝试像这样拆分字符串:
$string = letters1234_1-someMoreText;
输出应该是:
$string_split [letters1234, 1, someMoreText];
仅当字符串匹配所需的模式时。
if(preg_match('/^([A-Z]+)([0-9])([_])([0-9])([-])/', $string)) {
$string_split = preg_split('/^([A-Z]+[0-9]+)([_])([0-9])([-])([A-Z]+[0-9]+)/', $string);
}else{
$string_split = $string;
}
这似乎比我现在理解的要复杂得多,但到目前为止卡住了..
您实际上可以使用当前的正则表达式(并向其添加 .*
以匹配字符串尾部)和 preg_match
function 并使用 捕获组 来捕获您需要获得的部分。在您的情况下,只需检查 preg_match
并找到匹配项后,将找到的捕获分配给 $string_split
变量:
$string = "letters1234_1-someMoreText";
$string_split = $string;
if (preg_match('/^([A-Z]+[0-9]+)_([0-9])-(.*)/si', $string, $matches)) {
array_shift($matches);
$string_split = $matches;
}
print_r($string_split);
看到 PHP demo 产生
Array
(
[0] => letters1234
[1] => 1
[2] => someMoreText
)
图案详情
^
- 字符串开头([A-Z]+[0-9]+)
- 捕获第 1 组:一个或多个字母后跟 1+ 个数字_
- 下划线([0-9])
- 捕获第 2 组:一个数字-
- 一个连字符(.*)
- 任何 0+ 个字符
is
修饰符使模式不区分大小写,.
可以匹配换行符。