簡體   English   中英

替換Java中沒有特定前綴和后綴的字符串

[英]Replace a string without certain prefix and suffix in Java

我正在嘗試替換給定字符串的所有匹配項,但是我必須確保它沒有被字母或數字包圍。

例如:

// Directive's block
BIT EQU $1111
BIT0 EQU $0000

// Instruction's block
ADD BIT, (**BIT**0)+

當我的解析器在第一行中找到EQU時,它將讀取指令的塊以嘗試查找給定的標簽(在這種情況下為“ BIT”)並將其替換為其值。 然后結果是(這是錯誤的):

ADD $1111, (**$1111**0)+

覆蓋另一個標簽的名稱,因為它是它的子字符串。 因此,我必須確保周圍的字符不是字母或數字,然后才能確保它不會覆蓋另一個標簽ID。

我現在的代碼是:

output += operand.replace(label, value)+" ";

操作數:包含整個操作數的字符串標簽:將找到替換值的標簽值:將被該標簽替換的值

現在我正在嘗試使用ReplaceAll()和一些正則表達式:

String regex = "(?<![a-zA-Z_])"+label+"[^a-zA-Z_]";

output+= operand.replaceAll(regex, value)+" ";

但它引發以下異常:

IndexOutOfBoundsException:非組1(java.util.regex.Matcher.start)

即使我只留下后綴,它也會引發相同的錯誤。

有人知道這意味着什么嗎?

謝謝你們

如果您正在使用replaceAll()並嘗試用$1111替換某些東西,那將不起作用,因為$replaceAll具有特殊含義。 使用Matcher.quoteReplacement(value)代替replaceAll()調用中的value ; quoteReplacement確保所有特殊字符都被“引用”,以使它們不再具有特殊含義。 (替換操作將$1解釋為“替換組1的內容”,這就是您收到錯誤的原因。)

暫無
暫無

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

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