wenyan icon indicating copy to clipboard operation
wenyan copied to clipboard

正則表達式?吾有一正則

Open cuixiping opened this issue 5 years ago • 9 comments

For example

吾有一正則。始於數。有字不知其數。終於數。名曰「正則之甲」。
吾有一正則。始於數一以上。終。名曰「正則之乙」。

means

var 正則之甲 = /^\d.*\d$/;
var 正則之乙 = /^\d+$/;

cuixiping avatar Dec 24 '19 10:12 cuixiping

Sounds great, we can put it in the standard libraries. Let's think about how to translate other regex grammar such as {}[]^- etc.

LingDong- avatar Dec 24 '19 14:12 LingDong-

有字不知其數 这个可替代表达太多了,而且不同的情况怎么组合起来呢

CurvedArray avatar Dec 25 '19 02:12 CurvedArray

有字不知其數 这个可替代表达太多了,而且不同的情况怎么组合起来呢

该例中,“字”表示任意字符,“不知其數”表示任意数量,基本与原始正则语法顺序对应了。组合有什么困难? 正则有许多语法规则,每个语法都是可以设计和实现的。

cuixiping avatar Dec 25 '19 03:12 cuixiping

我觉得不一定要翻译正则语法。 正则表达式就如同数学、物理公式一样精妙,没必要强行转换为汉语/文言。 但确实可以作为 stdlib 的一个类,当作一个“物”来描叙。 当使用“言”时,直接使用现在主流正则字符串作为“术”的参数好了。

lymslive avatar Dec 30 '19 08:12 lymslive

我觉得不一定要翻译正则语法。 正则表达式就如同数学、物理公式一样精妙,没必要强行转换为汉语/文言。 但确实可以作为 stdlib 的一个类,当作一个“物”来描叙。 当使用“言”时,直接使用现在主流正则字符串作为“术”的参数好了。

因为精妙所以没必要转换? 正则有十分明确的规范,转换为文言,有需求场景和应用价值,也不存在技术上的不可能。 直接嵌入英文格式的正则,是没办法的办法。

cuixiping avatar Jan 16 '20 10:01 cuixiping

我是认为,正则表达是偏实用性的技术。现有许多语法还是专门针对英文字符设计的,比如 [a-zA-Z]。 我们可以做一套文言版的,但如果要推广使用,我想最好还是能兼容现在的正则。 比方说实现为 stdlib 中的一个类,它可以由类似 `[a-zA-Z_][a-zA-Z0-9_]*' 的字符串构建。 也可以用文言自己的描叙方法构造,再通过宏定义使之有些诵读性。

吾有一列,充以“数”、“言”、“爻”、“列”、“物”,名之曰‘基本类型’。

吾将拟一正则,始于“吾有一”,其前或有空,续以‘基本类型’之某字,续以“名之曰”,
续以‘左单引号’,续之以汉字若干,续之以‘右单引号’……

描叙方法肯定会比正则语法冗长许多,但意思易懂,各有用途。

也需要预定义各种字符类。

lymslive avatar Jan 17 '20 08:01 lymslive

[a-z]表示的是全体小写字母中的一个,文言中无需考虑这种情况,如果需要表示全体汉字中的一个,我觉得大概可以用类似[一-锯]Unicode中的全体汉字)的语法(如果对精度要求不是很高的话用.这种通配符也可以),[0-9]是全体数字中的一个,但“零”到“九”在Unicode中是不连续的,可以用[零一二三四五六七八九],再加上宏定义简化,至于“九十九”这种包含十、百、千、万这些字的数的匹配方法,还有待商议。 个人认为 @cuixiping 的语法更简便,但是始於終於可能对编译器和使用者都不太友好,因为毕竟不是每一个正则表达式都包含^$来限定开始和结尾,有些是不限制的,建议改成,作为两个单独的符号存在,比如始於數。可以改成始。有數。,和后面有字不知其數。的语法统一。

GLanguage avatar Feb 16 '20 02:02 GLanguage

一些关于语法的小建议:

Wenyan RE RE
有言甲。
有言甲或乙。 甲|乙
有字。 .
有組如是。... 是謂其組也。 ( ... )
有組如是。其組不記。... 是謂其組也。 (?: ... )
始。 ^
終。 $
或有甲。 甲?
有甲。其數不知。 甲+
或有甲。有則其數不知。 甲*
有甲。其數為五。 甲{5}
有甲。其數不小於五。 甲{5,}
有甲。其數不小於五而不大於七。 甲{5,7}
有字。其為甲乙丙丁之一。 [甲乙丙丁]
有字。其不為甲乙丙丁之一。 [^甲乙丙丁]

其中,如果之后紧跟,那么它会被视为一个字符集的标志;否则,可以用它来转义,比如有字有匹配“有”,有字字匹配“字”,有字或匹配“或”。 以上仅代表个人观点,欢迎吐槽。

GLanguage avatar Feb 21 '20 12:02 GLanguage

想到wenyan中标点符号是可选的,那么就用「」把所有的“言”或“字符集”都括起来,这样就能避免转义,比如有言「。」有言「或。言有字」,然后有字仍然表示字符集。但这样就会导致很难匹配,也许可以单独定义字符常量。然后就是数字,我想可以用数字表示[〇零一二三四五六七八九],用非零数字表示[一二三四五六七八九],然后用数符表示[〇零一二三四五六七八九十百千...]

GLanguage avatar Mar 11 '20 02:03 GLanguage