簡體   English   中英

正則表達式,僅匹配包含一次出現某些字符的字符串

[英]Regex, only match with strings that contain one occurence of certain characters

我有以下正則表達式:

^[-]?([+]?[\d]+[-+*/]?)+$

我的目標是匹配包含算術表達式和整數的字符串。 它是成功的,除了一個案例。 說到等號。 我只希望這個表達式匹配最多包含一個等號的字符串。 這意味着它將匹配

7=7

但不是

7=7=7

因為第二個字符串出現了兩次等號。

我嘗試使用花括號 {},我想我需要類似的東西

={0,1}

這將與恰好出現一次或未出現“=”的字符串匹配。 但不幸的是,我不知道如何將它合並到我的正則表達式中。

由於您只想匹配算術表達式和整數,因此我更改了代碼以查找具有數字、運算符或等號的所有內容: ^[-+*\/\d=]+$ 我需要轉義字符/ -> \/

為了只匹配一個等號,我添加了一個負前瞻: (?..*=.*=) 如果它找到括號內的內容,則整個正則表達式將不匹配。 例如,如果您有一個單詞 mytext: (?!mytext)整個正則表達式將不匹配。 .*表示它可以找到所有內容( .代表每個字符, *表示它可以存在 0 次到無限次)。

所以這是解決方案:

^(?!.*=.*=)[-+*\/\d=]+$

在此處查看實時示例: https://regex101.com/r/zhSEmf/1/

此外,您的代碼不適用於 -4*-4。

編輯:由於您不希望代碼以 / 或 * 開頭,因此我在否定前瞻中添加了 id : ^(?..*=.*=|[\/*].*)[-+*\/\d=]+$

如果你想匹配只有一個等號的字符串,那么你不想匹配沒有等號的字符串,也不想匹配多個等號的字符串。 像這樣的正則表達式:

^(?!.*=.*=)(?![^=]*$)[-+*\/\d=]+$

不幸的是,這將匹配像9=這樣的字符串。 可能是不希望的。

我懷疑你想同時匹配 a=b 形式的字符串和 a 形式的字符串,其中 a 和 b 是數字。 然后這將起作用:

^[-+*\/\d]+(=[-+*\/\d]+){0,1}$

不幸的是,這將匹配*9=+8之類的字符串,但修復此問題會使正則表達式更加復雜,因此不太適合作為示例。 例如,對於沒有等號的表達式: Regular Expression for Simple Arithmetic String

在此處查看實時示例: https://regex101.com/r/AZymgc/1

暫無
暫無

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

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