簡體   English   中英

可以使用正則表達式計算此函數的反函數嗎?

[英]Can the inverse of this function be computed using regular expressions?

我有一個函數將類名(西班牙語!)從單數形式轉換為復數形式:

function pluralize($element) {
    return preg_replace('/^([A-Za-z][a-z]*)([A-Z]|$)/', '\1s\2', $element);
}

現在我想定義這個函數的逆。 以下功能有效嗎?

function singularize($plural) {
    return preg_replace('/^([A-Za-z][a-z]*)(s)([A-Z]|$)/', '\1\3', $element);
}

它應該工作正常,但在第二種模式中你不需要圍繞s的括號。 你還需要記住,如果你有多個s,那么這兩種模式都不會關心它。 因此,第一個模式將ClassX更改為ClasssX,第二個模式將其更改為ClassX。 請記住一些事情。

通常,只有's'被排除在[az] *位置之外
在創建類名時。

這意味着[az] *需要排除's'。 [a-rt-z]*
然后這些可能會奏效。

/^([A-Za-z][a-rt-z]*) ([AZ]|$)/x
/^([A-Za-z][a-rt-z]*)(s)([AZ]|$)/x

編輯 - 否則(用你擁有的東西),你必須跟蹤每個類名所處的狀態。即:如果它沒有被復數,它就不能被單一化,否則一個額外的's'可能被剝奪從原來的班級名稱。

上面的正則表達式不需要維持狀態,但它們的形式有限。
最好在類中添加一個區別字符,以區別於單數/復數狀態。 如果得到支持,也許是一個下划線。 否則將沒有控制或其他可識別的標記來說明哪個是哪個。

暫無
暫無

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

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