Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式:从管道指定文件中提取字符串_Javascript_Regex_Jmeter - Fatal编程技术网

Javascript 正则表达式:从管道指定文件中提取字符串

Javascript 正则表达式:从管道指定文件中提取字符串,javascript,regex,jmeter,Javascript,Regex,Jmeter,我有一个原始http响应,如下所示: 1 1|CI17438666|IB136180000001|55544001|10.106.1.XXX| |first 我需要从中提取44001份 我可以使用Start:| 555 End:| 我试过了 (.*)(|555)(.*)(|) 返回1 另一方面,我在Jmeter中使用这个正则表达式,它遵循java脚本样式的正则表达式。如果是这样的模式,那么它将起作用: \|555(\d+)\| 它与555之后和两个管道之间的零件相匹配。如

我有一个原始http响应,如下所示:

1
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
|first        
我需要从中提取44001份

我可以使用Start:| 555 End:|

我试过了

(.*)(|555)(.*)(|) 
返回1


另一方面,我在Jmeter中使用这个正则表达式,它遵循java脚本样式的正则表达式。

如果是这样的模式,那么它将起作用:

\|555(\d+)\|

它与
555
之后和两个管道之间的零件相匹配。

如果是这种模式,这将起作用:

\|555(\d+)\|
它与
555之后和两个管道之间的零件相匹配。

尝试以下操作:

$str  = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(?P<digits>\d+)\|/',$str,$match);

echo $match['digits'];
$str='11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX | first';
preg|u match('/\\| 555(?P\d+)\\|/',$str,$match);
echo$match['digits'];

$str='11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX | first';
preg|u match('/\\| 555(\d+)+\\\\|/',$str,$match);
回声“;
打印(匹配);
试试这个:

$str  = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(?P<digits>\d+)\|/',$str,$match);

echo $match['digits'];
$str='11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX | first';
preg|u match('/\\| 555(?P\d+)\\|/',$str,$match);
echo$match['digits'];

$str='11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX | first';
preg|u match('/\\| 555(\d+)+\\\\|/',$str,$match);
回声“;
打印(匹配);
使用
explode()
它会更快

参考资料:

使用
explode()
它会更快


参考资料:

我一眼就能看出您的正则表达式有两个问题:

第一个是管道字符在正则表达式中有特殊的含义,它表示或。例如,这个正则表达式:

.*\|555(.*)\|
将匹配“abc”或“def”

这意味着您的正则表达式节“(| 555)”和“(|)对于第一种情况意味着“nothing或555”,对于第二种情况意味着“nothing或nothing”

如果要匹配管道字符,则需要对其进行转义,因此“|”将变为“\|”

第二个问题是,.*是一个贪婪的匹配器,它将尽可能多地匹配,因为你的点代表任何字符,你将得到一个匹配,直到下一个匹配组

因此,如果我们修复管道问题并获得新的正则表达式:

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^^^^^^^^^^^^^^ 
使用示例字符串,.*匹配:

.*\|555(.*?)\|
换句话说,在下一组匹配之前,它尽可能匹配

你可以通过增加一个额外的参数从贪婪变为懒惰?最后,因此“*”变为“*?”这将在匹配完成后立即停止匹配,您的正则表达式现在是:

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^ 
您的匹配组现在变成:

.*\|555([0-9]*)\|
如果您知道555后面的字符总是数字,那么您可以将匹配组限制为仅数字,而不必担心贪婪和懒惰:

var str = "11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first";
var pattern = "(.*)(/|555)([0-9]*)(/|)";
var result = str.match(pattern);
// The matches are in elements 0 through n.
for (var index = 0; index < result.length; index++)
{
    document.write ("submatch " + index + ": " +  result[index]);
    document.write("<br />");
}

希望能有所帮助。

我一眼就能看出您的正则表达式有两个问题:

第一个是管道字符在正则表达式中有特殊的含义,它表示或。例如,这个正则表达式:

.*\|555(.*)\|
将匹配“abc”或“def”

这意味着您的正则表达式节“(| 555)”和“(|)对于第一种情况意味着“nothing或555”,对于第二种情况意味着“nothing或nothing”

如果要匹配管道字符,则需要对其进行转义,因此“|”将变为“\|”

第二个问题是,.*是一个贪婪的匹配器,它将尽可能多地匹配,因为你的点代表任何字符,你将得到一个匹配,直到下一个匹配组

因此,如果我们修复管道问题并获得新的正则表达式:

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^^^^^^^^^^^^^^ 
使用示例字符串,.*匹配:

.*\|555(.*?)\|
换句话说,在下一组匹配之前,它尽可能匹配

你可以通过增加一个额外的参数从贪婪变为懒惰?最后,因此“*”变为“*?”这将在匹配完成后立即停止匹配,您的正则表达式现在是:

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^ 
您的匹配组现在变成:

.*\|555([0-9]*)\|
如果您知道555后面的字符总是数字,那么您可以将匹配组限制为仅数字,而不必担心贪婪和懒惰:

var str = "11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first";
var pattern = "(.*)(/|555)([0-9]*)(/|)";
var result = str.match(pattern);
// The matches are in elements 0 through n.
for (var index = 0; index < result.length; index++)
{
    document.write ("submatch " + index + ": " +  result[index]);
    document.write("<br />");
}
希望能有所帮助。

var str=“11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX |第一”;
var pattern=“(.*)(/| 555)([0-9]*)(/|”)”;
变量结果=str.match(模式);
//匹配项位于元素0到n中。
对于(var index=0;index”);
}
第三个子字符串将返回所需的结果。

var str=“11 | CI17438666 | IB136180000001 | 55544001 | 10.106.1.XXX | first”;
var pattern=“(.*)(/| 555)([0-9]*)(/|”)”;
变量结果=str.match(模式);
//匹配项位于元素0到n中。
对于(var index=0;index”);
}

第三个子字符串将返回所需的结果。

您的正则表达式部分非常完美。但是正则表达式放在jmeter内部,jmeter无法处理php代码。谢谢你的正则表达式部分很完美。但是正则表达式放在jmeter内部,jmeter无法处理php代码。谢谢我选择你的答案作为深入解释的正确答案。非常感谢。我选择你的答案作为深入解释的正确答案。非常感谢。