提取字符串我有如下原料http響應:正則表達式:從管sperated文件
1
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
|first
我需要從中提取44001部。
我可以唯一地標識使用開始字符串:| 555結束:|
我已經試過
(.*)(|555)(.*)(|)
返回1.
在側面說明,我使用的regex的JMeter隨後的Java腳本風格的正則表達式。
提取字符串我有如下原料http響應:正則表達式:從管sperated文件
1
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
|first
我需要從中提取44001部。
我可以唯一地標識使用開始字符串:| 555結束:|
我已經試過
(.*)(|555)(.*)(|)
返回1.
在側面說明,我使用的regex的JMeter隨後的Java腳本風格的正則表達式。
有兩個問題與您正則表達式,我可以看到乍一看:
首先是管道字符在正則表達式中有特殊含義,意思是OR。因此,例如,這個正則表達式:
[abc|def]
將匹配'abc'或'def'。
這意味着您正則表達式的部分「(| 555)」和「(|)」的意思是第二種情況對於第一種情況「Nothing或555」和「Nothing或無」。
如果你想你需要逃避它的管道字符匹配,因此「|」變成'\ |'。
第二個問題是:*是一個貪婪的匹配器,它會盡可能地匹配,並且由於你的點代表任何字符,所以你將得到一個匹配到下一個匹配組的方式。
因此,如果我們解決管道問題,並得到這個新的正則表達式:
.*\|555(.*)\|
使用您的示例字符串中,*匹配:
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
^^^^^^^^^^^^^^^^^^
換句話說,它儘可能匹配它可以直到下一個小組匹配。
您可以從貪婪到懶惰通過添加額外的切換?最後,'。*'變成'。*?「這將停止一旦作出了匹配匹配,你的正則表達式現在是:
.*\|555(.*?)\|
和你匹配組現在變成:
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
^^^^^
如果你知道後面的字符555將永遠是數字,那麼你可以限制你的匹配組只是數字,而不用擔心貪婪和懶惰:
.*\|555([0-9]*)\|
希望有所幫助。
試試這個:
$str = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(?P<digits>\d+)\|/',$str,$match);
echo $match['digits'];
OR
$str = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(\d+)+\|/',$str,$match);
echo "<pre>";
print_r($match);
你的正則表達式部分是完美的。但正則表達式進入jmeter,它不能處理php代碼。謝謝! – user1263746 2013-02-26 07:10:34
使用explode()
這將是更快
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 />");
}
第三個子字符串將返回所需的結果。
我選擇你的答案作爲深入解釋的正確答案。謝謝! – user1263746 2013-02-26 10:34:01