簡體   English   中英

RegEx和MySQL基礎-替換字符串的不同部分

[英]RegEx and MySQL basics - replacing a varying part of a string

我的表中有一個字段,其中包含表示某些對象級別的字符串,如下所示:

"<3<"
"<3<5<"
"<3<5<49<"

等等

我有一個函數,要從這樣的字符串中刪除一個級別,而又不知道該級別在字符串本身中的位置。 具體來說,我想刪除“ 3”。 結果應為:

"0"
"<5<"
"<5<49<"

但是,如果我想刪除5,而不是3,結果應該是這樣的:

"<3<"
"<3<"
"<3<49<"

最后,如果我選擇刪除49而不是3或5,我想得到這個:

"<3<"
"<3<5<"
"<3<5<"

如您所見,要刪除的子字符串的位置有所不同-有時是最左邊的,有時是中間的,有時是最右邊的。 畢竟,重要的是:

  1. 如果我要刪除的數字是唯一的值,並用“小於”號括起來(如刪除3則為“ <3 <”),則新結果必須為0。
  2. 如果我要刪除的數字不是唯一的值,那么唯一重要的是最終符號保持不變-就像在其中一樣,整個字符串必須保持用“小於”符號括起來,而子字符串應包含多個“小於”符號不能連續出現符號(例如,不允許使用“ 3 << 5 <”)。

是否有使用php和mysql處理正則表達式的簡單方法,還是我應該進行3次手動檢查?

附言:盡管我可能這樣說,但這不是家庭作業,而是實際的工作問題。

您可以分2個步驟進行操作。 假設您輸入的是這個

"<3<"
"<3<5<"
"<3<5<49<"

並且您要刪除數字3:

步驟1.由於值始終以“ <”開頭,因此您可以嘗試將“ <3”替換為“”。 然后輸入變為

"<"
"<5<"
"<5<49<"

步驟2.將等於“ <”的字符串替換為0。然后您可以得到

"0"
"<5<"
"<5<49<"

如果要刪除5或49,也是如此。我認為您可以輕松地使用正則表達式來執行這些步驟。

對於每行兩次替換:(例如,您要刪除“ 3”)

replace "^<3<$" -> "0"; 
replace "<3" -> "";

第一步:

replace "<3(?=<)"

使用前瞻性很重要,否則您可能要替換* <3 * 4之類的東西,而這不是您想要的。

第二步:

replace "^<$" with "0"

暫無
暫無

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

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