使用正则表达式移动字符串中的多个字母

Move multiple letters in string using regex

我想使用正则表达式移动字符串中的两个字母。

W28
L36
W29-L32

应改为:

28W
36L
29W-32L

数字在 2544 之间变化。需要移动的字母总是 "W" and/or "L" 并且当它们都存在于字符串中时 "W" 总是第一个。 我需要使用 PHP 使用单个正则表达式来执行此操作。任何想法都会很棒!

编辑: 我是正则表达式的新手,尝试了很多东西都没有成功。我最接近的是对每种可能性使用 "/\b(W34)\b/"。我还发现了一些关于在 replace 函数中使用变量的信息,但没有成功使用这些变量。

您的正则表达式 \b(W34)\b 与整个单词 W34 完全匹配。你需要一个 character class to match W or L, and some alternatives to match the numeric range, and use the most of capturing groups.

您可以使用以下正则表达式替换:

$re = '/\b([WL])(2[5-9]|3[0-9]|4[0-4])\b/'; 
$str = "W28\nL36\nW29-L32"; 
$result = preg_replace($re, "", $str);
echo $result;

IDEONE demo

在这里,([WL]) 匹配并捕获 WL 到第 1 组,(2[5-9]|3[0-9]|4[0-4]) 匹配从 25 到 44 的整数并捕获到第 2 组。 Backreferences 用于反转替换字符串中组的顺序。

这里是a regex demo,以备日后调整。