-1

我有以下字符串:

73746174652C313A312C310D
                     |
                      - extract the value at this position

我想使用正则表达式提取值 1(字符串末尾的 1)。

所以基本上是一个充当 charAt(index) 的正则表达式。

对于仅支持正则表达式的 3rd 方应用程序,我需要此解决方案。请注意,该应用程序无法访问捕获组,并且不支持否定的lookbehinds。

4

4 回答 4

4

在 C# 中:

(?<=^.{21})(.)

在 JS 中:

/.(?=.{2}$)/
于 2013-08-05T11:30:29.483 回答
2

第 22 个字符在捕获组 1 中。

/^.{21}(.)/

但是你在哪个系统中需要这个而不是正常的字符串处理?

于 2013-08-05T11:03:37.883 回答
2

你可以试试:

(?<=^.{21}).

它不适用于 Javascript,但也许它可以在您的应用程序中运行。

(?<= ... )这意味着:字符串开头前面的单个字符^加上 21 个字符.{21}。所以,最后,它返回第 22 个字符。

于 2013-08-05T11:27:10.660 回答
0

取决于你想如何匹配它(从开始的 x 距离或从结束的 x 距离)

/(.).{2}$/倒数第三个(捕获第 1 组)

/^.{21}(.)/第 22 个字符(捕获第 1 组)

//PHP
$str = '73746174652C313A312C310D';

$char = preg_replace('/(.).{2}$/','$1',$str); //3rd from last

preg_match('/(.).{2}$/',$str,$chars); //3rd from last
$char = $chars[1];

preg_match('/^.{21}(.)/',$str,$chars); //22nd character
$char = $chars[1];


//JS
var str = '73746174652C313A312C310D';
var ch = str.replace(/(.).{2}$/,'$1'); //3rd from last
var ch = str.match(/(.).{2}$/)[1]; //3rd from last
var ch = str.match(/^.{21}(.)/)[1]; //22nd character

如果您必须使用First match:工具位的结果,请运行两次:

73746174652C313A312C310D- ^.{21}.= 73746174652C313A312C31

73746174652C313A312C31- .$= 1

于 2013-08-05T10:58:52.930 回答