wenyan
wenyan copied to clipboard
正則表達式?吾有一正則
For example
吾有一正則。始於數。有字不知其數。終於數。名曰「正則之甲」。
吾有一正則。始於數一以上。終。名曰「正則之乙」。
means
var 正則之甲 = /^\d.*\d$/;
var 正則之乙 = /^\d+$/;
Sounds great, we can put it in the standard libraries. Let's think about how to translate other regex grammar such as {}[]^-
etc.
有字不知其數
这个可替代表达太多了,而且不同的情况怎么组合起来呢
有字不知其數
这个可替代表达太多了,而且不同的情况怎么组合起来呢
该例中,“字”表示任意字符,“不知其數”表示任意数量,基本与原始正则语法顺序对应了。组合有什么困难? 正则有许多语法规则,每个语法都是可以设计和实现的。
我觉得不一定要翻译正则语法。 正则表达式就如同数学、物理公式一样精妙,没必要强行转换为汉语/文言。 但确实可以作为 stdlib 的一个类,当作一个“物”来描叙。 当使用“言”时,直接使用现在主流正则字符串作为“术”的参数好了。
我觉得不一定要翻译正则语法。 正则表达式就如同数学、物理公式一样精妙,没必要强行转换为汉语/文言。 但确实可以作为 stdlib 的一个类,当作一个“物”来描叙。 当使用“言”时,直接使用现在主流正则字符串作为“术”的参数好了。
因为精妙所以没必要转换? 正则有十分明确的规范,转换为文言,有需求场景和应用价值,也不存在技术上的不可能。 直接嵌入英文格式的正则,是没办法的办法。
我是认为,正则表达是偏实用性的技术。现有许多语法还是专门针对英文字符设计的,比如 [a-zA-Z]
。
我们可以做一套文言版的,但如果要推广使用,我想最好还是能兼容现在的正则。
比方说实现为 stdlib 中的一个类,它可以由类似 `[a-zA-Z_][a-zA-Z0-9_]*' 的字符串构建。
也可以用文言自己的描叙方法构造,再通过宏定义使之有些诵读性。
吾有一列,充以“数”、“言”、“爻”、“列”、“物”,名之曰‘基本类型’。
吾将拟一正则,始于“吾有一”,其前或有空,续以‘基本类型’之某字,续以“名之曰”,
续以‘左单引号’,续之以汉字若干,续之以‘右单引号’……
描叙方法肯定会比正则语法冗长许多,但意思易懂,各有用途。
也需要预定义各种字符类。
[a-z]
表示的是全体小写字母中的一个,文言中无需考虑这种情况,如果需要表示全体汉字中的一个,我觉得大概可以用类似[一-锯]
(Unicode
中的全体汉字)的语法(如果对精度要求不是很高的话用.
这种通配符也可以),[0-9]
是全体数字中的一个,但“零”到“九”在Unicode
中是不连续的,可以用[零一二三四五六七八九]
,再加上宏定义简化,至于“九十九”这种包含十、百、千、万这些字的数的匹配方法,还有待商议。
个人认为 @cuixiping 的语法更简便,但是始於
和終於
可能对编译器和使用者都不太友好,因为毕竟不是每一个正则表达式都包含^
和$
来限定开始和结尾,有些是不限制的,建议改成始
和終
,作为两个单独的符号存在,比如始於數。
可以改成始。有數。
,和后面有字不知其數。
的语法统一。
一些关于语法的小建议:
Wenyan RE | RE |
---|---|
有言甲。 |
甲 |
有言甲或乙。 |
甲|乙 |
有字。 |
. |
有組如是。... 是謂其組也。 |
( ... ) |
有組如是。其組不記。... 是謂其組也。 |
(?: ... ) |
始。 |
^ |
終。 |
$ |
或有甲。 |
甲? |
有甲。其數不知。 |
甲+ |
或有甲。有則其數不知。 |
甲* |
有甲。其數為五。 |
甲{5} |
有甲。其數不小於五。 |
甲{5,} |
有甲。其數不小於五而不大於七。 |
甲{5,7} |
有字。其為甲乙丙丁之一。 |
[甲乙丙丁] |
有字。其不為甲乙丙丁之一。 |
[^甲乙丙丁] |
其中,如果字
之后紧跟。
,那么它会被视为一个字符集的标志;否则,可以用它来转义,比如有字有
匹配“有”,有字字
匹配“字”,有字或
匹配“或”。
以上仅代表个人观点,欢迎吐槽。
想到wenyan中标点符号是可选的,那么就用「」
把所有的“言”或“字符集”都括起来,这样就能避免转义,比如有言「。」
或有言「或。言有字」
,然后有字
仍然表示字符集。但这样就会导致很难匹配「
和」
,也许可以单独定义字符常量。然后就是数字,我想可以用数字
表示[〇零一二三四五六七八九]
,用非零数字
表示[一二三四五六七八九]
,然后用数符
表示[〇零一二三四五六七八九十百千...]