PHP - preg_match - 为匹配的元素分配任意值

发布于 2024-10-05 09:57:02 字数 563 浏览 4 评论 0原文

假设我们有这个正则表达式:

preg_match('/\b(xbox|xbox360|360|pc|ps3|wii)\b/i' , $string, $matches);

现在,每当正则表达式与 ex 匹配时。 三个 xbox 方法 (xbox|xbox360|360) 之一$matches,应该只返回 XBOX

这可能继续在preg_match() 上下文还是我应该使用其他方法?

提前致谢。

编辑:

我实际上是这样做的:

$x = array('xbox360','xbox','360');
if( preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m ) ) {
  $t = $m[0];
}
if ( in_array($t,$x) ) {
  $t = 'XBOX';
}

我想知道是否还有其他方法!

assuming we have this regex:

preg_match('/\b(xbox|xbox360|360|pc|ps3|wii)\b/i' , $string, $matches);

now, whenever the regex match for ex. one of the three xbox methods (xbox|xbox360|360), the $matches, should return just XBOX

is this possible continuing to work in the preg_match() context or i should use some other method?

thank's in advance.

EDITED:

im actually doing it like this:

$x = array('xbox360','xbox','360');
if( preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m ) ) {
  $t = $m[0];
}
if ( in_array($t,$x) ) {
  $t = 'XBOX';
}

i'm wondering if there is another way!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九局 2024-10-12 09:57:02

你当前的代码对我来说看起来不错,如果你想要它更奇特一点,你可以

preg_match('/\b((?P<XBOX>xbox|xbox360|360)|pc|ps3|wii)\b/i' , $string, $matches);
$t = isset($matches['XBOX']) ? 'XBOX' : $matches[0];

在匹配之前尝试命名子模式或 preg_replac'ing 东西:

$string = preg_replace('~\b(xbox|xbox360|360)\b~', 'XBOX', $string);
preg_match('/\b(XBOX|pc|ps3|wii)\b/i' , $string, $matches);

在大输入上我猜你的方法将是最快的。一个小的改进是将 in_array 替换为基于哈希的查找:

$x = array('xbox360' => 1,'xbox' => 1,'360' => 1);
if( preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m ) ) {
  $t = $m[0];
}
if ( isset($x[$t] ) {
  $t = 'XBOX';
}

命名子模式:请参阅 http://www.php.net/manual/en/regexp.reference.subpatterns.phphttp://php.net/manual/en/function.preg-match-all.php,示例 3

your current code looks ok to me, if you want it a bit fancier, you can try named subpatterns

preg_match('/\b((?P<XBOX>xbox|xbox360|360)|pc|ps3|wii)\b/i' , $string, $matches);
$t = isset($matches['XBOX']) ? 'XBOX' : $matches[0];

or preg_replac'ing things before matching:

$string = preg_replace('~\b(xbox|xbox360|360)\b~', 'XBOX', $string);
preg_match('/\b(XBOX|pc|ps3|wii)\b/i' , $string, $matches);

on big inputs i guess your method would be the fastest. A minor improvement would be to replace in_array with a hash-based lookup:

$x = array('xbox360' => 1,'xbox' => 1,'360' => 1);
if( preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m ) ) {
  $t = $m[0];
}
if ( isset($x[$t] ) {
  $t = 'XBOX';
}

named subpatterns: see http://www.php.net/manual/en/regexp.reference.subpatterns.php and http://php.net/manual/en/function.preg-match-all.php, example 3

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文