簡體   English   中英

REGEX匹配給定的PREFIX和SUFFIX

[英]REGEX to MATCH a given PREFIX and SUFFIX

我有由以下組成的字符串:

  • 前綴+后綴(可能在它們之間包含空格)
  • 前綴是ALFA (長度可變,大寫或小寫,可能不存在)
  • 后綴是NUMERIC (長度可變,可能包含空格)

我需要REGEX來匹配給定( 變量 )PREFIX和SUFFIX

示例 (前綴= ABCD,后綴= 123456789):

String to match (several possible combinations):  
ABCD123456789  
abcd123456789  
ABCD 123456789  
abcd 123456789  
ABCD 123 456 789  
abcd 123 456 789  
123456789  
123 456 789  

String matches
+--------+-------------------+-------+  
| PREFIX |      SUFFIX       | MATCH |  
+--------+-------------------+-------+  
|        | 123456789         | YES   |  
|        | 123 456 789       | YES   |  
|        | 1 2 3 4 5 6 7 8 9 | YES   |  
| ABCD   | 123 456 789       | YES   |  
| ABCD   | 1 2 3 4 5 6 7 8 9 | YES   |  
+--------+-------------------+-------+  
|        | 12345678          | NO    |  
|        | 123 456 7890      | NO    |  
| ABCD   | 12345678          | NO    |  
| ABCD   | 123 456 7890      | NO    |  
|        | 123456789 ABCD    | NO    |  
| AB     | 123456789         | NO    |  
+--------+-------------------+-------+  

換句話說
- 如果存在,前綴必須是MATCH(不區分大小寫),如果不存在,則必須為IGNORED
- 后綴必須匹配(空格必須是忽略!)

等效的JAVA代碼是:

//remove prefix (case insensitive)
STRING.substring(STRING.toUpperCase().startsWith(PREFIX) ? PREFIX.length() : 0).
//remove spaces
replace(" ","").
//match
equals(SUFFIX);

非常感謝。

首先刪除數字后綴中/周圍的所有空格:

str.replaceAll(" (?=[\\d ]*$)", "").matches("(?i)(ABCD)?123456789")

匹配您的所有測試用例(與您的不匹配不匹配)。

我知道你的問題有一個Java標簽,但我不熟悉Java。 由於Java和JavaScript有一些相似之處,因此這里有一個JavaScript實現來獲取想法。

 var rows = [{ prefix: null, suffix: '123456789', assert: true }, { prefix: null, suffix: '1123 456 789', assert: true }, { prefix: null, suffix: '1 2 3 4 5 6 7 8 9', assert: true }, { prefix: 'ABCD', suffix: '123 456 789', assert: true }, { prefix: 'ABCD', suffix: '1 2 3 4 5 6 7 8 9', assert: true }, { prefix: null, suffix: '12345678', assert: false }, { prefix: null, suffix: '123 456 7890', assert: false }, { prefix: 'ABCD', suffix: '12345678', assert: false }, { prefix: 'ABCD', suffix: '123 456 7890', assert: false }, { prefix: null, suffix: '123456789 ABCD', assert: false }, { prefix: 'AB', suffix: '123456789', assert: false }]; var PREFIX = 'ABCD'; var SUFFIX = '123456789'; var separator = '_'; var regex = new RegExp('^(' + PREFIX.toLowerCase() + ')?' + separator + '.*' + SUFFIX.replace(/\\s+/g, '') + '$', 'g'); document.write('<pre>generated regex: ' + regex + '</pre>'); for (var i = 0; i < rows.length; i++) { regex.lastIndex = 0; var item = rows[i]; var pre = (item.prefix || '').toLowerCase(); var suf = item.suffix.replace(/\\s+/g, ''); var subject = pre + separator + suf; var result = regex.test(subject); document.write('<pre class="' + ((result === item.assert) ? 'success' : 'fail') + '">' + pre + ' ' + suf + ', expected: ' + item.assert + ', result: ' + result + '</pre>'); } 
 pre { padding: 5px; } .success { border: 1px solid green; } .fail { border: 1px solid red; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM