![](/img/trans.png)
[英]Regex to match only certain characters or strings and only one instance of each?
[英]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.