在格式错误的编号列表(1,。,2、3等)之间匹配内容,正则表达式

时间:2019-01-31 21:51:32

标签: php regex

处理这个疯狂的字符串,这是从PDF到文本框架的转换。

我将在最后发布它,但在这里破译可能更容易:https://regex101.com/r/DxXupz/1

我想出了如何使用此正则表达式在1.2.之间进行匹配:

1\.(.*?)2\.

但是正如您所看到的,我正在处理的$string具有各种数字和小数等,并且一直上升到11.

是否有一个正则表达式解决方案可在一个preg_match_all函数查询中捕获所有编号列表,例如(上面的正则表达式适用于1.2.的示例):

preg_match_all('/1\.(.*?)2\./s', $string, $matches);

要将内容从1.带回到2.,从2.带回到3.,依此类推?

  

$string = "1. CZ243 96V DC   

20
0pcs  


11.35U
SD            220
.
00
USD


2
”

,74mm/s 


25lbs .

2.

CV243 96V DC  

10
0pcs  


11.35USD            1135
.00
USD  


4
”

,74mm/s


25lbs

3
. CV243 96V DC   

150pcs         12.20
U
SD           1830.00
USD


6
”

,74mm/s   


25lbs .

4. CV243 96V DC  

100
pcs        13.50
1USD            1350.00
USD


8
”

,74mm/s 


25lbs .

5
. CV243 96V DC 

50
pcs    

15.00USD     

750.00
USD


10
”

,74mm/s 


25lbs .

6. CV243 96V DC   

200pcs 

15.00USD    

3000.00
USD


12
”

,74mm/s 


25lbs .

7
. CV243 96V DC  


50pcs 


16.00USD           800.00
USD


14
”

,74mm/s 


25lbs .

8. CV243 96V DC   

75pcs         16.50
USD



1237.50
USD


16
”

,74mm/s 


25lbs .

9. CV243 96V DC               
5
0pcs 


18.46USD           
923.00
USD


18
”

,74mm/s 


25lbs .


10.CV243 96V DC               
50pcs 


18.46USD 

923.00
USD


20
”

,74mm/s 


25lbs .


11. 
CV243 96V DC               
5
0pcs 


20.77USD           1038.50
USD


24
”

,74mm/s 


25lbs .


";

1 个答案:

答案 0 :(得分:1)

此正则表达式应为您提供所需的结果

fetch('https://www.random.org/cgi-bin/randbyte?nbytes=2')
    .then(response=>response.body.getReader())
    .then(reader=>0/*Here convert to Uint16*/)

它将查找一些数字,然后可选地跟空格,句点,某些可能的空格和字符串\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$) 。然后,它将抓取所有字符,直到下一次出现的起始模式或字符串结尾为止(使用正向超前断言,因此在该匹配中不捕获字符)。在PHP中:

CV243 96V DC

输出有些混乱,因此在这里我将不重复所有操作,但是您可以在此demo中看到它的运行情况。这是前两个值:

preg_match_all('/\d+\s*\.\s*(CV243 96V DC.*?)(?=\d+\s*\.\s*CV243 96V DC|$)/s', $string, $matches);
print_r($matches[1]);

注意

我假设您的数据应该以{{1​​}}开头,而不是以[0] => CV243 96V DC 20 0pcs 11.35U SD 220 . 00 USD 2 ” ,74mm/s 25lbs . [1] => CV243 96V DC 10 0pcs 11.35USD 1135 .00 USD 4 ” ,74mm/s 25lbs 开头。如果它应该以{{1​​}}开头,而您仍然想捕获它,请将正则表达式中的1. CV243更改为1. CZ243