我想知道如何解决这个问题。假设我有一个看起来像这样的字符串:
xx-123-456-12-xxl-1235-6122
我还有一个正则表达式,可以尝试匹配任何看起来像这样的内容
[LETTER][LETTER]-[NUMBER][NUMBER][NUMBER]-[NUMBER][NUMBER][NUMBER]
意思是上面的强,它将与此匹配:
xx-123-456
我该如何从该字符串中删除与正则表达式不匹配的其他所有内容。这意味着xx-123-456
之后的所有东西都应该被削减并删除。无论正则表达式在字符串中的哪个位置找到匹配项,这也需要工作。
任何想法/解决方案?
这将起作用:
$txt = 'xx-123-456-12-xxl-1235-6122';
preg_match( '/^[a-z]{2}-'d{3}-'d{3}/i', $txt, $matches );
echo $matches[0];
^
= 字符串的开头;
[a-z]
= 从 a 到 z 的任何字符;
{2}
= 先前模式重复 2;
'd
= 任何数字/数字
在 php 中有几种方法可以做到这一点:
- 使用
preg_match
匹配您想要的内容并打印匹配的数组元素
使用 preg_replace
并使用捕获的组使用反向引用进行替换。- 使用
preg_replace
并使用后视断言 - 使用
preg_replace
和使用'K
(比赛重置)
以下是使用 #4 的一种方法:
$str = 'xx-123-456-12-xxl-1235-6122';
$str = preg_replace('/^'p{L}{2}-'p{N}{3}-'p{N}{3}'K.*$/u', '', $str);
//=> xx-123-456
正则表达式演示