我有一些这种风格的字符串:
$var = "a - it is a string"; // I want this output: 'it is a string'
$var = "m - it is second string"; // I want this output: 'it is second string'
所以这是我的模式:
[single character in the first of string]<space>-<space>{anything} // I want just {anything}
我如何在PHP REGEX中执行此操作?
这是我的尝试(altought不起作用,我确定它真的远远不是我想要的)
preg_replace("/^\w\s+-\s+/","",$str);
编辑:
应该注意的是,我在现实中使用波斯人物。这里还有一个例子:
$var = 'ی - این یک متن تست است';
答案 0 :(得分:2)
preg_replace('/^.\s-\s/', '', $var);
实时PHP演示
正则表达式解释
^.\s-\s
Assert position at the beginning of a line «^»
Match any single character that is NOT a line break character «.»
Match a single character that is a “whitespace character” «\s»
Match the character “-” literally «-»
Match a single character that is a “whitespace character” «\s»
答案 1 :(得分:1)
首先,您需要将/w
更改为\w
。其次,为了匹配单个字符,您可以使用字符类(如果您只想匹配字母字符)并匹配其余字符您可以使用修饰符.
后跟*
:
preg_replace("/^[a-z]\s+-\s+.*/","",$str);
另请注意,由于您使用了锚^
来指定字符串的开头,因此如果您要处理多行字符串,则需要使用标记m
和g
匹配全球。
preg_replace("/^[a-z]\s+-\s+.*/m","",$str);
请参阅演示https://regex101.com/r/gT9wB8/1
Reed更多关于正则表达式https://www.regular-expressions.info
如果您正在处理unicode字符串,可以使用标记u
,使您的正则表达式引擎与unicode字符匹配。
另请注意,您需要更改字符的范围或使用仅匹配一个字符(但所有字符)的点.
:
'/^.\s+-\s+.*/mu'
或者:
'/^[\u0622-\u06cc]\s+-\s+.*/mu'
答案 2 :(得分:1)
您可以使用:
^\p{L} # match unicode letter at start
\h+ # match 1 or more horizontal space
- # match 1 hyphen
\h+ # match 1 or more horizontal space
使用的正则表达式是:
/u
重要的是在此正则表达式中使用GetFieldType()
修饰符来支持unicode。