2012-04-27 40 views
1

如何抓取RE用戶名? 例如:用正則表達式來抓取用戶名

我需要抓住john_smith 我想這[ \t]+(User)?[: \t]*([.]+) 但無法得到它的工作。 任何人都可以幫忙嗎?

+0

你能更精確地瞭解什麼構成輸入被允許走? (您的RE需要它從一個或多個空格或製表符開始,但您的示例似乎沒有。) – 2012-04-27 18:54:28

回答

1

嘗試沒有領先[ \t]+,這意味着 '至少一個'。或者使用[ \t]*這意味着「儘可能多,也許是零」。

'用戶'一詞看起來不是可選的,因此請繼續使用User[: \t]*。點是一個小丑,並匹配每個角色。

因此,將它包含到組中並沒有意義。小組的其他成員變得毫無意義,並且沒有增加點數。因此,組中的一個點表示一個字面點。只使用,而不是點:(.+)

[ \t]*User[: \t]*(.+) 
+0

除了一件事外,這件作品很棒。 如果我有'用戶:john_smith.Some文本' 它返回'john_smith.Some文本',我只需要'john_smith' – 2012-04-27 19:03:20

+0

然後你必須定義什麼可能會終止名稱。點似乎是合理的,但另一方面,下劃線也可以。如果用戶名只是a-zA-Z0-9和下劃線,那麼'[\ t] *用戶[:\ t] *([a-zA-Z0-9 _] +)解決了您的任務。也許有一點改進:'[\ t] *用戶:?[\ t] *([a-zA-Z0-9 _] +)'。如果只有一個字面點可以終止這個名字,那麼一個否定組就可以這樣做:'[\ t] *用戶:?[\ t] *([^。] +)'。 – 2012-04-27 19:08:15

+0

謝謝,它完美幫助。 – 2012-04-27 19:13:53

3

嘗試是這樣的:

/User:?\s*(\S+)/ 

在postrgres,這將是這樣的:

substring('User: john_smith' from 'User:?\s*(\S+)') 
+0

我需要在Postgre sql中執行此操作,像這樣 SUBSTRING('User:john_smith','User: ?\ s *(\ S +)'), – 2012-04-27 18:58:27

+0

我添加了一個使用[正則表達式上的postgresql文檔]構建的示例(http://www.postgresql.org/docs/9.0/static/functions-matching.html) 。 – gpojd 2012-04-27 19:17:11