diff --git a/raw_idenitifers/Cargo.toml b/raw_idenitifers/Cargo.toml
new file mode 100644
index 0000000..40aff17
--- /dev/null
+++ b/raw_idenitifers/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "raw_idenitifers"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/raw_idenitifers/src/main.rs b/raw_idenitifers/src/main.rs
new file mode 100644
index 0000000..61b84cf
--- /dev/null
+++ b/raw_idenitifers/src/main.rs
@@ -0,0 +1,7 @@
+fn r#match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+
+fn main() {
+ assert! (r#match("foo", "foobar"));
+}
diff --git a/src/Ch21_Appendix.md b/src/Ch21_Appendix.md
index 57303d8..ca1326f 100644
--- a/src/Ch21_Appendix.md
+++ b/src/Ch21_Appendix.md
@@ -69,6 +69,44 @@
- `virtual`
- `yield`
-### 原始标识符
+### 原始标识符
+
+*原始标识符,raw identifiers* 属于允许实现使用一般不被允许关键字的语法。是通过在关键字前加上前缀 `r#`,使用原始标识符的。
+
+比如,`match` 是个关键字。在咱们尝试编译下面这个使用 `match` 作其名字的函数时:
+
+文件名:`src/main.rs`
+
+```rust
+fn match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+```
+
+咱们将得到这样的报错:
+
+```console
+error: expected identifier, found keyword `match`
+ --> src/main.rs:1:4
+ |
+1 | fn match(needle: &str, haystack: &str) -> bool {
+ | ^^^^^ expected identifier, found keyword
+```
+
+该报错显示咱们无法将关键字 `match` 用作函数标识符。要将 `match` 用作函数名字,咱们就需要使用原始标识符语法,像下面这样:
+
+文件名:`src/main.rs`
+
+```rust
+fn r#match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+
+fn main() {
+ assert! (r#match("foo", "foobar"));
+}
+```
+
+此代码将不带任何错误地编译。请注意那个函数的定义中,与 `main` 中该函数被调用处其名字上的 `r#` 前缀。