[英]Trying to create a regex in PHP that matches patterns inside a pattern
[英]Look inside pattern if parent pattern matches and share chars between patterns
我有一個像這樣的字符串:
票務順序:№123123123. CED-MSW-RPG-MOW-CEK PODYLOVA / ALEMR 555 423578932 19OCT11票務順序:№123123123. 346257. CSK-MOW-PRG-MOW-CWQ PODYLOVA / ALEMR 555 45837043 19OCT11
我需要收集所有CEK,MOW,PRG等代碼。 我首先嘗試了這種模式:
$pattern = '#[-|\s]([A-Z]{3})#';
結果得到了我所有的代碼(沒關系)和用戶的前三個字符的姓:“ PODYLOVA”中的“ POD”。 如果我說“在我的代碼之后必須將連字符或自由空間字符更改為以下代碼即可:
$pattern = '#[-|\s]([A-Z]{3})[-|\s]#';
我的$ matches var有這個:
array (
0 =>
array (
0 => ' CED-',
1 => '-RPG-',
2 => '-CEK ',
3 => ' CSK-',
4 => '-PRG-',
5 => '-CWQ ',
),
1 =>
array (
0 => 'CED',
1 => 'RPG',
2 => 'CEK',
3 => 'CSK',
4 => 'PRG',
5 => 'CWQ',
),
)
您可以看到,我的模式沒有在所需代碼之間“共享”連字符。
我看到了兩種解決方案,但是無法對模式進行成像,因此很適合:
看來,在我看來,解決方案#1是最好的,但是它的外觀如何?
嘗試這個:
\\b([AZ]{3})\\b
高溫超導
這會給您您想要的嗎?
(?<=-|\s)[A-Z]{3}(?=-|\s)
用grep測試:
kent$ echo "Tickets order: № 123123123. CED-MSW-RPG-MOW-CEK PODYLOVA/ALEMR 555 423578932 19OCT11 Tickets order: № 123123123. 346257. CSK-MOW-PRG-MOW-CWQ PODYLOVA/ALEMR 555 45837043 19OCT11"|grep -Po '(?<=-|\s)[A-Z]{3}(?=-|\s)'
CED
MSW
RPG
MOW
CEK
CSK
MOW
PRG
MOW
CWQ
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.