这个问题是Do C++ 11正则表达式与UTF-8字符串一起使用的扩展吗?
#include <regex>
if (std::regex_match ("?", std::regex("?") )) // "\u4e2d" also works
std::cout << "matched\n";
Run Code Online (Sandbox Code Playgroud)
该程序在Mac Mountain Lion上编译,clang++具有以下选项:
clang++ -std=c++0x -stdlib=libc++
Run Code Online (Sandbox Code Playgroud)
上面的代码有效.这是一个标准范围正则表达式,"[?-?????]"用于匹配任何日语汉字或汉字.它适用于Javascript和Ruby,但即使使用类似的版本,我似乎也无法使用C++ 11工作[\u4E00-\u9fa0].下面的代码与字符串不匹配.
if (std::regex_match ("?", std::regex("[?-?????]")))
std::cout << "range matched\n";
Run Code Online (Sandbox Code Playgroud)
改变语言环境也没有帮助.有任何想法吗?
所以我发现如果你添加+到最后,所有范围都有效.在这种情况下[?-?????]+,但如果你添加{1} [?-?????]{1}它不起作用.而且,它似乎超越了它的界限.它不会匹配拉丁字符,但它会匹配?这是\u306f和?它\u3041.他们都躺在下面\u4E00
nhahtdh还提出了regex_search,它也可以在不增加的情况下工作,+但它仍然会遇到与上面相同的问题,因为它会超出其范围.同时也使用了语言环境.Mark Ransom建议它将UTF-8字符串视为一组愚蠢的字节,我认为这可能就是它所做的.
进一步推动UTF-8变得混乱的理论[a-z]{1}和[a-z]+匹配a,但只[?-?????]+匹配任何角色,而不是[?-?????]{1}.
鉴于这个用SQLAlchemy和Django models.py编写的简单表,如果不为null,我如何设置UPC是唯一的.UPC不适用于所有项目,但是它应该是唯一的.
class Products(base):
__tablename__ = u'products'
id = Column(Integer(), primary_key=True, autoincrement = True)
product_name = Column(String(), unique=True, nullable=False)
upc = Column(String(), nullable = True)
Run Code Online (Sandbox Code Playgroud)
和
class Products(models.Model):
id = models.AutoField(primary_key=True)
product_name = models.TextField()
upc = models.TextField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud) import Text.ParserCombinators.Parsec
delimiter :: Parser ()
delimiter = do char '|'
return ()
<?> "delimiter"
eol :: Parser ()
eol = do oneOf "\n\r"
return ()
<?> "end of line"
item :: Parser String
item = do entry <- manyTill anyChar (try eol <|> try delimiter <|> eof)
return entry
items :: Parser [String]
items = do result <- many item
return result
Run Code Online (Sandbox Code Playgroud)
当我运行parseTest items "a|b|c"上面的代码时,我收到以下错误:
*** Exception: Text.ParserCombinators.Parsec.Prim.many:
combinator 'many' is applied to a parser that accepts …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个与C通信的Haskell程序(最终通过GHC-iOS为iOS).我想让它从C传递一个字符串到Haskell,让Haskell处理它,然后通过hsc2s将一些数据类型从Haskell返回到C Structs.我找不到一个简单明了的教程是不成功的.Haskell唯一需要的是String,没有别的.
我对第一部分没有任何问题,将一个字符串传递给Haskell.
testPrint :: CString -> IO ()
testPrint c = do
s <- peekCString c
putStrLn s
Run Code Online (Sandbox Code Playgroud)
出于测试目的和将来的参考,我只希望能够处理如下的内容.
C结构
struct testdata {
char *a;
char *b;
int c;
};
Run Code Online (Sandbox Code Playgroud)
Haskell数据类型
data TestData = TestData {
a :: String,
b :: String,
c :: Int
} deriving Show
-- not sure what the type would look like
testParse :: CString -> TestData
Run Code Online (Sandbox Code Playgroud)
我知道我需要将TestData类型化为Storable并实现peek,poke,sizeOf和alignment,但我需要先看一个简单的例子才能真正理解它.大多数教程都需要外部库,使其比需要的更复杂.
以下是我看过的资源:
Stackoverflow - 如何使用hsc2hs绑定到常量,函数和数据结构?
编辑:目前我被卡住的地方(在C中调用setFoo时会出现分段错误)
Haskell代码片段
instance …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题,我想访问最后一个元素:
List<string>[] list = new List<string>[3];
Run Code Online (Sandbox Code Playgroud)
所以每个列表里面有3个元素,但我应该如何访问这些列表中的最后一个?
我试图找到解析这样一行的最佳方法:
Explicit|00|11|Hello World|12 3 134||and|blah|blah|blah
我只想提取第6和第7纵杆之间的东西
我试过类似的东西
if ($line =~ /^(.*\|){6}(\w*)\|/ ) {
print $2;
}
Run Code Online (Sandbox Code Playgroud)
问题是,第一部分似乎与最长的序列匹配,因为.*,或许我应该使用不同的东西.在垂直条之间,有字母数字字符,空格和标点符号.
我应该匹配它们之间的最短距离吗?
我在这里有一些代码用于将URI路径解析为字符串列表.例如/user/home会成为["user", "home"].
pathPiece :: Parser String
pathPiece = do
char '/'
path <- many1 urlBaseChar
return path
uriPath :: Parser [String]
uriPath = do
pieces <- many pathPiece
try $ char '/'
return pieces
parseUriPath :: String -> [String]
parseUriPath input = case parse uriPath "(unknown)" input of
Left _ -> []
Right xs -> xs
Run Code Online (Sandbox Code Playgroud)
但是,如果路径以另一个路径结束,/例如/user/home/应该是合法路径,则解析器将失败.这是因为pathPiece无法解析最后一个,/因为没有后续的urlBaseChars.我想知道你如何解决它,直到它失败,如果它失败你撤消字符消耗.
在客户端,我通过 post from 发送图像form enctype=multipart/form-data,在服务器端,我将其保存到目录中。所有这些都在我的计算机上本地运行,并直接使用python app.py.
这是我设置文件保存的参考:
http://flask.pocoo.org/docs/patterns/fileuploads/
在实际的生产服务器上,我使用 Apache 和 mod_wsgi 运行它,我根据这个网站设置:
http://flask.pocoo.org/docs/deploying/mod_wsgi/
对于目录的权限我曾尝试chown -R 777和chown -R www-data:www-data其中对于用户看起来相关的Apache这样的代码:WSGIDaemonProcess app user=www-data group=www-data threads=5。
但是,在这一切之后,我仍然无法保存文件。我只是在尝试保存文件时收到 500 HTTP 错误。
这是相关的烧瓶代码:
UPLOAD_FOLDER = '/images/'
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/upload_ocr_images', methods=['GET', 'POST'])
def upload_images():
if request.method == 'POST':
files = request.files.getlist("images[]")
for file in files:
if allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('home'))
Run Code Online (Sandbox Code Playgroud)
在这一点上,我想知道是否需要在 Apache 方面设置一些东西。
我正在处理两个文件,所以当我循环浏览一个文件时,我需要查看另一个文件的一部分,我在其中遇到的信息将是顺序的.所以我认为最好的方法是跟踪行号:
open(PARSED, "< file.txt") or die$!;
my @parsedFile = < PARSED >;
my $line = 0;
my $size = @parsedFile;
# This next part is in a loop, but the only important thing is this next line
print $parsedFile[$line];
即使$ line的值增加,它也
只会打印,但如果我执行以下操作则没有问题:
我甚至尝试了多种尝试从@parsedFile中提取单行但没有运气的变体.
foreach (@parsedFile){
print $_;
}
我还有很多东西要学习Haskell,我在使用下面的代码时遇到了一些麻烦.我可以执行以下操作,但当然它会创建编译器警告,因为并非所有情况都显示在内case address s of,我想确保那些警告不存在:
postAddTenantR :: Handler Value
postAddTenantR = do
newTenantData <- parseJsonBody :: Handler (Result NewTenant)
case newTenantData of
Success s -> runDB $ do
newTenantGroup <- insert $ TenantGroup
_ <- insert $ Tenant (firstName s) (lastName s) (Just newTenantGroup)
case address s of
Just newAddress -> do
newProperty <- insert $ Property newAddress
insert $ Lease Nothing Nothing Nothing newProperty newTenantGroup
returnJson $ ProcessingResponse True Nothing
Error e -> returnJson $ ProcessingResponse False (Just …Run Code Online (Sandbox Code Playgroud)