将某些内容与字符串中的正则表达式匹配并删除/删除所有不匹配的内容


Matching something with regex in a string and removing / cutting out everything that did not match

我想知道如何解决这个问题。假设我有一个看起来像这样的字符串:

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 中有几种方法可以做到这一点:

  1. 使用preg_match匹配您想要的内容并打印匹配的数组元素
  2. 使用
  3. preg_replace 并使用捕获的组使用反向引用进行替换。
  4. 使用preg_replace并使用后视断言
  5. 使用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

正则表达式演示