正则表达式在固定位置索引处提取值

时间:2013-08-05 10:55:27

标签: regex

我有以下字符串:

73746174652C313A312C310D
                     |
                      - extract the value at this position

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

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

我需要此解决方案用于仅支持正则表达式的第三方应用程序。请注意,应用程序无法访问捕获组,也不支持负面的外观。

4 个答案:

答案 0 :(得分:2)

你可以尝试:

(?<=^.{21}).

它无法在Javascript中运行,但也许它可以在您的应用中运行。

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

答案 1 :(得分:2)

在C#中:

(?<=^.{21})(.)
JS中的

/.(?=.{2}$)/

答案 2 :(得分:1)

第22个角色位于捕获组1中。

/^.{21}(.)/

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

答案 3 :(得分: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